我开始在我的 asp.net mvc 2 项目中使用 knockout
无论如何,我尝试了一些简单的事情。 我创建了一个像这样的模型:
var userViewModel = {
ID: ko.observable(),
assignedGroups: ko.observableArray(),
avilableGroups: ko.observableArray(),
permissions: ko.observableArray()
};
然后在 jquery 的 document.ready 上我调用:
ko.applyBindings(userViewModel);
在 aspx 本身我有:
<select multiple id="groupOfUser" class="multi_added_groups" data-bind="foreach: assignedGroups">
<option data-bind="text: $data, value: $data"></option>
</select>
<span data-bind="text: ID"></span>
如果我首先将数据放入 userViewModel View 按预期显示。那太好了 但我希望 View 一开始是空的。 然后在用户选择用户后我发出一个ajax请求 我的回复是这样的:
{"ID":691,
"assignedGroups":["group1","group2"],
"avilableGroups":["role.administrator","role.editor"],
"permissions":[{"name":"admin","level":"ReadWrite"},
{"name":"admin.errorInfo","level":"Read"}]
}
然后在我的回调函数中:
ko.mapping.fromJS(res, userViewModel);
我想就是这样。我的 View 没有被来自服务器的新数据刷新...... 我究竟做错了什么?
谢谢!
最佳答案
我自己也遇到过这个问题好几次。映射插件似乎期望您的对象最初是从映射数据创建的。这是插件的一点限制,但可以轻松解决。以下是使用插件创建属性的示例,其中更新可以正常工作。
http://jsfiddle.net/madcapnmckay/8BVMZ/1/
var userViewModel = function () {
var self = this;
ko.mapping.fromJS({
ID: "",
assignedGroups: [],
avilableGroups: [],
permissions: []
}, {}, self);
userSelected = function () {
ko.mapping.fromJS(ajaxResponse, {}, self);
console.log(JSON.stringify(ko.toJS(self)));
}
};
希望这有帮助。
关于knockout.js - 每次 ajax 请求返回时, knockout 中的模型都会尝试再次映射。 View 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10738772/