gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:20:46 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com