Data binding Breeze.js查询不更新淘汰视图

Data binding Breeze.js查询不更新淘汰视图,data-binding,mvvm,knockout.js,breeze,Data Binding,Mvvm,Knockout.js,Breeze,我正在通过breeze.js查询数据,它第一次运行良好。第二次未更新视图时 html 如果您只使用普通JS对象,它将不起作用。因为它不知道基础数据何时更改。要使其工作,请使用: $(document).ready(function () { var manager = new breeze.EntityManager('/breeze/dbentities'); var isApplied = false; var dmodel; function queryS

我正在通过breeze.js查询数据,它第一次运行良好。第二次未更新视图时

html


如果您只使用普通JS对象,它将不起作用。因为它不知道基础数据何时更改。要使其工作,请使用:

$(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工作代码。速度要快得多:

$(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);;
});
});
$(文档).ready(函数(){
var manager=new breeze.EntityManager('/breeze/dbentities');
var isApplied=false;
var-dmodel={results:ko.observableArray()};
函数查询失败(数据){
控制台日志(数据);
}
函数查询成功(数据){
如果(!已应用){
对于(var i=0;i
数据中的属性是可观察的吗?我使用breeze.js默认值。我不知道?也许不是?我不是KO专家。。希望有人能找到这个。。我的两个想法是:1)属性是不可观察的,因此它们不知道要更新;2)因为每次分配dmodel=data时,都会覆盖以前的绑定应用程序。您可能需要使用ko.mappings扩展将属性从一个映射到另一个。还是什么?很抱歉没有太多帮助。也可以查看一下数据。结果是一个可观察的数组。链接不起作用,所以breeze不返回Arrays?网站上说是的。奇怪。对于我来说,映射解决方案是变慢。不确定的是,如果变慢了,您仍然无法简单地覆盖您的模型。使用Questions属性创建模型,然后每次清除数组并推送新的数组值。如果使用默认的Breeze映射库,Breeze会为实体的任何非标度导航属性返回可观察数组。对于查询结果,Breeze返回一个标准javascript数组,其中每个元素都是可观察的。这是故意的。如果需要,很容易获取查询结果并将其放入promise回调中的可观察数组中。Breeze网站上提供了许多Breeze zip中的示例。@jay:有没有更好的解决方案,如我在下面发布的那样?很高兴看到它能工作。在这种情况下,您只需在创建模型后立即应用绑定,并删除已应用的检查。代码将更干净。
$(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");
    });
});
$(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);;
});
});