gpt4 book ai didi

knockout.js - knockout 会根据自动映射的可观察对象创建一个空对象

转载 作者:行者123 更新时间:2023-12-03 23:07:38 29 4
gpt4 key购买 nike

我正在尝试解决ko映射的一个小问题。场景是我的ViewModel基本上是对象的集合。每个对象都是通过json调用创建的,方法是:

var ViewModel = ko.observableArray();

$.getJSON(url, function(data) {
ViewModel.push(ko.mapping.fromJSON(data));
});

这很完美,我可以在HTML中做各种魔术。
问题是,例如,如果我想向集合中添加一些内容,比如说要支持客户端的“添加和编辑”方案。我想做类似的事情:
<input type="button" value="add new" data-bind="click: AddNew" />

我希望ViewModel中的AddNew函数类似于:
function AddNew() {
this.push(// WHAT HERE?);
}

基本上,我需要推送一个与其他已经存在的对象相同的对象,但是当然要包含所有被遮盖的属性...

我在想一种“克隆”列表中的对象并将所有可观察对象设置为空的方法,但是我不知道从哪里开始,恐怕:/

最佳答案

如果您打算将功能扩展到客户端编辑/添加,那么我建议您将对象形式化为js类,然后在内部映射这些对象。这将使您可以在主 View 模型上使用add方法,并轻松地在客户端创建空白实例。

映射插件的一个警告是,对于更新对象,它希望这些对象最初已由插件映射。这是一个简单的例子。

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());
}
};

希望这可以帮助。

关于knockout.js - knockout 会根据自动映射的可观察对象创建一个空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10763230/

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