Javascript 敲除可拖动可排序映射克隆更改
我正在尝试使用knockoutsortable和映射插件,将一个产品列表拖到另一个列表中 这里有一个非常好的例子来展示我的意思 我想要的是“购物车”中的产品参考而不是克隆“货架”上的产品 我已经设法通过引用货架上的商品来计算购物车中商品的名称,但是我很难让购物车中的商品只包含进行此引用所需的数据,而不包含所有其他残损 环顾四周后,我发现Ryan Niemeyer在几年前提出了一个非常诱人的解决方案,但小提琴抛出了404错误 我创建了一个“克隆”函数,但由于我的所有数据都已映射,因此未使用构造函数,例如:Javascript 敲除可拖动可排序映射克隆更改,javascript,knockout.js,knockout-mapping-plugin,knockout-sortable,Javascript,Knockout.js,Knockout Mapping Plugin,Knockout Sortable,我正在尝试使用knockoutsortable和映射插件,将一个产品列表拖到另一个列表中 这里有一个非常好的例子来展示我的意思 我想要的是“购物车”中的产品参考而不是克隆“货架”上的产品 我已经设法通过引用货架上的商品来计算购物车中商品的名称,但是我很难让购物车中的商品只包含进行此引用所需的数据,而不包含所有其他残损 环顾四周后,我发现Ryan Niemeyer在几年前提出了一个非常诱人的解决方案,但小提琴抛出了404错误 我创建了一个“克隆”函数,但由于我的所有数据都已映射,因此未使用构造函数
var product = function(ID, name, other){
this.productID = ko.observable(ID);
//etc.
};
这意味着我不能做我想做的事,也就是:
product.prototype.clone = function(){
var x = ko.mapping.toJS(this);
delete x.productName;
delete x.someOtherData;
ko.mapping.fromJS(x);
};
我希望只需引用原始的productID
键,就可以将一个新对象放入购物车。我已经在小提琴上注释掉了这个的代码。拖动后,console.log
不会被调用,因此该函数甚至不会被调用
我还查看了谷歌论坛上的knockout sortable并找到了,这就是我获得克隆位的地方——但我无法使它适合我的用例
成功回答此问题的结果是,当车中只有一辆自行车时,保持productArray
不变,并将listArray
设置为[{'productID':1}]
这是我第一次在SO上发布问题,所以如果我没有说清楚,请对我放松!我已经感谢社区,因为它多年来一直在帮助我解决问题:)您希望您的映射选项看起来像:
var options = {
productArray: {
create: function(mappingData) {
var result = ko.mapping.fromJS(mappingData.data);
result.clone = function() {
return { productID: result.productID() };
};
return result;
}
}
};
或者,您可以为您的产品创建一个带有克隆函数的构造函数,并返回类似于returnnewproduct(mappingData.data)的内容代码>
我让上面的克隆以不可观察的形式返回productID,除非您需要对该值的更改做出反应,否则这应该是好的
然后,calculatedName
函数的第一行需要类似于:
var options = {
productArray: {
create: function(mappingData) {
var result = ko.mapping.fromJS(mappingData.data);
result.clone = function() {
return { productID: result.productID() };
};
return result;
}
}
};
var x=ko.unwrap(参数productID)
这将检索值,无论它是否可见,因此函数可以针对productArray或listArray工作
那个不可见的克隆人已经成功了!在我的应用程序中,我需要有多个列表,您的解决方案也能很好地处理这一点: