Tal*_*ris 9 knockout-mapping-plugin knockout.js
我试图用ko映射解决一个小问题.场景是我的ViewModel基本上是一个对象集合.每个对象都是通过json调用创建的,这样:
var ViewModel = ko.observableArray();
$.getJSON(url, function(data) {
ViewModel.push(ko.mapping.fromJSON(data));
});
Run Code Online (Sandbox Code Playgroud)
这非常有效,我可以在HTML中做各种魔术.问题是,例如,如果我想在我的收藏中添加一些东西,那么就说支持客户端"添加和编辑"场景.我想做的事情如下:
<input type="button" value="add new" data-bind="click: AddNew" />
Run Code Online (Sandbox Code Playgroud)
我希望ViewModel中的AddNew函数类似于:
function AddNew() {
this.push(// WHAT HERE?);
}
Run Code Online (Sandbox Code Playgroud)
基本上我需要推送一个与已经存在的对象相同的对象,当然还有所有消隐的属性......
我想到了一种从列表中"克隆"对象并将所有可观察对象设置为空的方法,但我不知道从哪里开始我害怕:/
如果要将功能扩展到客户端编辑/添加,那么我建议将对象形式化为js类,然后在内部映射这些对象.这将允许您在主视图模型上添加方法,并轻松地在客户端创建空白实例.
对映射插件的一个警告是,为了更新对象,它希望这些对象最初是由插件映射的.这是一个如何完成它的快速示例.
var YourObjectClass = function (config) {
var self = this, data;
// your default structure goes here
data = $.extend({
name: "",
id : -1
}, config);
ko.mapping.fromJS(data, {}, self);
};
var viewModel = function(initialData) {
var self = this;
ko.mapping.fromJS(initialData, {
items: {
create : function (options) {
return new YourObjectClass(options.data);
}
}
}, self);
this.AddNew = function () {
self.items.push(new YourObjectClass());
}
};
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
8544 次 |
| 最近记录: |