Как да направя изглед в Durandal с данни, върнати от jsonp повикване?

Имам проблем с преглеждането на данните, които се връщат от JSONP извикване към спокойна api услуга. Аз използвам Durandal. Не съм сигурен дали не се изобразява, защото използвам грешно обвързване на данни, или е заради jsonp, или е някаква друга причина.

Ето какво имам в моя файл clients.js:

define(['plugins/http', 'durandal/app', 'knockout'], function (http, app, ko) {
return {
        displayName: 'Clients',
        clients: ko.observableArray([]),
        activate: function () {
            var that = this;

            return http.jsonp('http://site/api/clients/1', 'jsoncallback').then(function (response) {
                that.clients(response.items);
            });

        }
    };
}); 

Данните, които се връщат, изглеждат така:

{
Id: 1,
Company: "Exosis",
email: "[email protected]",
phone: "+1 (824) 431-2547",
address: "234 Ruby Street, Beechmont, Connecticut, 5450",
about: "Consectetur dolore excepteur ex sit nostrud.Voluptate tempor dolore minim do aliqua duis consequat nostrud amet. Nisi consequat eu Lorem ipsum.",
clientStartDate: "1990-09-18",
isActive: true,
clientType: "multiple"
}

Това, което не разбирам, е как трябва да се свържа (data-bind) с данните, които се връщат. Пробвах всички варианти, за които се сетих. Това е файлът clients.hmtl:

<body> 
    <section>
        <h2 data-bind="text: displayName"></h2>
        <div data-bind="foreach: clients">
                <div data-bind="text: Id"></div>
                <div data-bind="text: Company"> </div>
        </div>

    </section>
</body>

Благодаря за всякакви отзиви.

АКТУАЛИЗАЦИЯ Така че промених clients.js на that.clients.push(response.items); И в дебъгера имам клиенти: Array[1] 0: undefined


person Benutzer    schedule 09.12.2013    source източник
comment
Получавате ли някаква грешка?   -  person margabit    schedule 09.12.2013
comment
Няма грешка. Нищо не се появява.   -  person Benutzer    schedule 09.12.2013
comment
Изглежда добре за мен, въпреки че бих препоръчал да изтеглите програмата за отстраняване на грешки в контекста на chrome, която ще ви помогне да видите към какво се обвързвате: chrome.google.com/webstore/detail/knockoutjs-context-debugg/   -  person Shaun Rowan    schedule 10.12.2013
comment
Клиентите показват ли се в обвързването на displayName, ако коментирате функцията за активиране?   -  person Shaun Rowan    schedule 10.12.2013
comment
Уверете се, че контекстът на this е правилен, когато се извиква activate().   -  person Brett    schedule 10.12.2013
comment
@ShaunRowan Имам дебъгера за нокаут контекст за хром, просто не мога да разбера как работи. Какво правите, след като щракнете върху активиране на проследяването?   -  person Benutzer    schedule 10.12.2013
comment
Зоната за активиране на проследяване не е това, което искате. Това, което искате да направите, е да изберете елемент с лупата, след което да щракнете върху изтрития контекст в стилове/Изчислени/Слушатели на събития/DOM точки на прекъсване/Свойства в областта на менюто.   -  person Shaun Rowan    schedule 10.12.2013
comment
@ShaunRowan Това работи. =) И displayName се показва. Няма нищо за избор за клиентския цикъл.   -  person Benutzer    schedule 10.12.2013
comment
Тогава може би все още е празен масив? Проверихте ли вашия мрежов раздел, за да видите какво се връща от сървъра? Опитахте ли да зададете точка на прекъсване в обратното извикване на данни, за да видите какво се връща? Какво става, ако инициализирате клиентите като клиенти: ko.observableArray([{ Id: 1, Company: 'foo'}])?   -  person Shaun Rowan    schedule 11.12.2013


Отговори (1)


Не съм сигурен, че можете да замените масива, след като бъде инициализиран. Опитайте да pushing всеки елемент, като използвате функциите за псевдо-масив на Knockout (не родния push).

Може да изчакате потвърждение, не мога да тествам замяна веднага, но съм сигурен, че натискането работи, както се рекламира.

Също така първо тествайте с локални данни и наблюдавайте мрежовия си трафик, след като активирате отново JSON-P функционалността.

И докато съм на това; помислете за CORS, ако можете (без връзка).

person tne    schedule 09.12.2013
comment
Натискането помага. Все още съм заседнал с масив, който обаче не мога да разгледам. Чудя се дали това е така, защото jsonp данните са обвити в клиентски клас. - person Benutzer; 10.12.2013