Запрос Breeze.js не обновляет представление нокаута

Я запрашиваю данные через breeze.js, который отлично работает в первый раз. Второй раз вид нет обновлен.

HTML

<a id="linkQDate">Order by Newest</a>
<a id="linkQScore">Order by Score</a>


    
    
       <strong><span data-bind="text: Score"></span></strong>
       <span data-bind="text: Titel"></span>
    
    

JS

$(document).ready(function () {
var manager = new breeze.EntityManager('/breeze/dbentities');
var isApplied = false;
var dmodel;

$("#linkQDate").click(function () {
    var query = breeze.EntityQuery.from("Questions").orderBy("Date");
    manager.executeQuery(query).then(querySucceeded);
    function querySucceeded(data) {
        dmodel = data;
        if (!isApplied) {

            ko.applyBindings(dmodel, $("#questionWrapper")[0]);
            isApplied = true;
       }
    }

});
$("#linkQScore").click(function () {
    var query = breeze.EntityQuery.from("Questions").orderBy("Score");
    manager.executeQuery(query).then(querySucceeded);
    function querySucceeded(data) {
        dmodel = data;
        if (!isApplied) {
            ko.applyBindings(dmodel, $("#questionWrapper")[0]);
            isApplied = true;
        }
    }

});
});
 daniel17 июн. 2013 г., 17:55
я получаю ошибку: функция ожидается
 Excommunicated17 июн. 2013 г., 18:01
 Excommunicated17 июн. 2013 г., 16:52
я не эксперт по нокаутам. Надеюсь, что кто-нибудь найдет этоНе знаю, как обновить, или 2) потому что каждый раз, когда вы назначаете dmodel = data, вы перезаписываете предыдущее приложение связывания. вам может понадобиться использовать расширение ko.mappings для "карта" свойства от одного до другого. Или что-то? Извините за небольшую помощь ..
 daniel17 июн. 2013 г., 16:40
я использую значения по умолчанию breeze.js. Я нене знаешь? Может нет?
 Excommunicated17 июн. 2013 г., 16:55
Также может быть, посмотритеВот
 Excommunicated17 июн. 2013 г., 16:36
свойства в 'данные' Наблюдаемые?
 daniel17 июн. 2013 г., 17:32
Data.results - это наблюдаемый массив. Ссылка не делаетт помощь
 Excommunicated17 июн. 2013 г., 17:48
мы можем попробовать удалитьdmodel = data и поместив его в оператор if .. затем добавьте оператор else со следующимdmodel.results(data.results); это должно обновить наблюдаемый массив, а не заменить весь объект?

Ответы на вопрос(2)

Решение Вопроса

это не будет работать. Потому что он не знает, когда основные данные изменяются. использованиеплагин для картирования чтобы это работало:

$(document).ready(function () {
    var manager = new breeze.EntityManager('/breeze/dbentities');
    var isApplied = false;
    var dmodel;

    function querySucceeded(data) {
        if (!isApplied) {
            dmodel = ko.mapping.fromJS(data);
            ko.applyBindings(dmodel, $("#questionWrapper")[0]);
            isApplied = true;
        } else {
            ko.mapping.fromJS(data, dmodel);
        }
    }

    $("#linkQDate").click(function () {
        var query = breeze.EntityQuery.from("Questions").orderBy("Date");
        manager.executeQuery(query).then(querySucceeded);
    });

    $("#linkQScore").click(function () {
        var query = breeze.EntityQuery.from("Questions").orderBy("Score");
    });
});
 Tomas Kirda17 июн. 2013 г., 19:07
Не уверен, что если это произойдет, вы все равно не сможете просто перезаписать свою модель. Сделайте модель со свойством Вопросы, затем каждый раз очищайте массив и выдвигайте новые значения массива.
 daniel17 июн. 2013 г., 19:01
так бриз не возвращает наблюдаемых массивов? Сайт говорит, что это так. странный. Картографическое решение - замедлить для меня
 daniel17 июн. 2013 г., 22:16
@jay: есть ли лучшее решение, как я разместил ниже?
 daniel17 июн. 2013 г., 18:52
это работает, но очень медленно, по крайней мере, в IE?
 Jay Traband17 июн. 2013 г., 20:00
Если вы используете библиотеку отображения Breeze по умолчанию, Breeze возвращает наблюдаемые массивы для любых нескалярных навигационных свойств объекта. Для результатов запроса Breeze возвращает стандартный массив javascript, в котором каждый элемент является наблюдаемым. Это по замыслу. Если вам нужно, довольно легко взять результаты запроса и поместить их в наблюдаемый массив в обратном вызове обещания. У нас есть несколько примеров в архиве Breeze, доступных на веб-сайте Breeze.

$(document).ready(function () {
var manager = new breeze.EntityManager('/breeze/dbentities');
var isApplied = false;

var dmodel = { results: ko.observableArray() };

function queryFailed(data) {
                console.log(data);
            }
function querySucceeded(data) {
    if (!isApplied) {
        for (var i = 0; i < data.results.length; i++) {
            dmodel.results.push(data.results[i]);

        }

        ko.applyBindings(dmodel, $("#questionWrapper")[0]);
        isApplied = true;
    } else {
        dmodel.results.removeAll();

        for (var i = 0; i < data.results.length; i++) {
            dmodel.results.push(data.results[i]);
        }
    }
}

$("#linkQDate").click(function () {
    var query = breeze.EntityQuery.from("Questions").orderBy("Date");
    manager.executeQuery(query).then(querySucceeded).fail(queryFailed);;
});

$("#linkQScore").click(function () {
    var query = breeze.EntityQuery.from("Questions").orderBy("Score");
    manager.executeQuery(query).then(querySucceeded).fail(queryFailed);;
});
});
 Tomas Kirda18 июн. 2013 г., 00:00
Приятно видеть, как это работает. В этом случае вы можете просто применить привязки сразу после создания модели и снять проверку isApplied. Код будет чище.

Ваш ответ на вопрос