Как визуализировать представление в Durandal с данными, возвращаемыми из вызова jsonp?

У меня возникают проблемы с просмотром данных, которые возвращаются из вызова JSONP в службу restful API. Я использую Дюрандаль. Я не уверен, что это не рендеринг, потому что я использую неправильную привязку данных, или это из-за jsonp, или по какой-то другой причине.

Вот что у меня есть в файле client.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"
}

Чего я не понимаю, так это того, как я должен подключаться (связывать данные) к возвращаемым данным. Я перепробовал все возможные варианты. Это файл client.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>

Спасибо за любой отзыв.

ОБНОВЛЕНИЕ Итак, я изменил client.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 Knockout, который поможет вам увидеть, к чему вы привязываетесь: 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 У меня есть отладчик контекста нокаута для Chrome, я просто не могу понять, как он работает. Что вы делаете после того, как нажмете включить трассировку?   -  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)


Не уверен, что вы можете заменить массив после его инициализации. Попробуйте pushобработать каждый элемент с помощью функций псевдомассива Knockout (не родной push).

Возможно, вы захотите подождать подтверждения, я не могу протестировать обновление сразу, но я уверен, что отправка работает, как рекламируется.

Также сначала проверьте локальные данные и отслеживайте сетевой трафик после повторного включения функций JSON-P.

И пока я этим занимаюсь; рассмотрите CORS, если можете (не связано).

person tne    schedule 09.12.2013
comment
Нажатие помогает. Однако я все еще застрял с массивом, на который я не могу смотреть. Интересно, это потому, что данные jsonp завернуты в класс клиентов. - person Benutzer; 10.12.2013