更新knockoutjs中的行项目

时间:2015-02-17 16:34:50

标签: javascript asp.net-mvc knockout.js

我对knockoutjs来说很新鲜。

我的问题是如何在asp.net MVC中使用ajax post serverside发布项目时如何更新observable数组中的项目。

某些值仅在服务器端重新计算。

我是否需要返回新列表,或者我只需要从服务器端返回更新的项目。

淘汰赛怎么知道改变哪个项目。 我没有运气就搜索了谷歌。

任何帮助都会受到赞赏。感谢。

2 个答案:

答案 0 :(得分:0)

您需要将服务器请求的相应结果移动到绑定可观察数组。

示例:viewModel引用将其视为self。

self.tableData = ko.observableArray([{id: 1, name: 'XYZ' , score: 90}, {id: 2, name: 'XZZ' , score: 80}
]);

tableData绑定到html表。

现在你提出了ajax请求。然后,您将获得成功回调的响应。 考虑结果为result.TABLEDATA = [{id:3,name:'QUS',得分:60},                                      {id:4,姓名:'YYY',得分:70}];

现在我们需要将此数据移至self.tableData(result.TABLEDATA);

我希望这会对你有所帮助。

答案 1 :(得分:0)

这取决于更新项目中的值是否可观察。如果数组包含纯JavaScript对象,则Knockout无法检测到对它们的更改。

如果数组中的项目具有observable,则可以。

此示例演示了这一点:http://jsfiddle.net/Quango/27tfmp0o/

self.Items = ko.observableArray([
    { Name: "Plain object", ID: 1},
    { Name: ko.observable("Knockout object"),
     ID: ko.observable(2)
    }
    ]);

第一项是普通物体。单击“更改第一个”按钮可更改对象,但屏幕上不显示任何内容。第二个具有可观察的值,因此单击“更改第二个”会更新项目。

如果您不想使用observable,最好的选择是从数组中删除该项,更改它,然后重新添加它 - 通过单击“Replace 1st”

来演示