knockout.js - 每次 ajax 请求返回时, knockout 中的模型都会尝试再次映射。 View 未更新

标签 knockout.js knockout-mapping-plugin

我开始在我的 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/

相关文章:

javascript - 如何通过 knockout 将数据绑定(bind)到对象列表?

javascript - Knockout 映射初始化的最佳代码

knockout.js - Knockout JS映射插件混淆

javascript - SVG 图像 xlink :href is not working with knockout

javascript - Knockout 不会更新使用 ko.mapping 制作的模型中的字符串数组

javascript - knockout 简单绑定(bind)问题

javascript - 使用 ko.mapping.fromJS 进行异步 ajax 调用后更新可观察的 knockout

knockout.js - KnockoutJS ObservableArray 数据分组

javascript - knockout 数据绑定(bind)到自行生成的 DOM

javascript - Knockout.js + MaterializeCSS 在多个选择上推送所选值不起作用