淘汰赛拖动排序的映射克隆改造(knockout draggable sortable mapping

2019-10-21 14:39发布

我试图用基因敲除可排序,与映射插件,拖的产品列表到另一个列表。

这里是一个非常被剥离的小提琴 ,试图证明什么,我在获得。

我要的是对产品的“购物车”来引用,而不是克隆,产品的“货架”上。

我已设法通过引用那些在货架上计算在车中的商品的名称,但我有在获得产品在车中只有他们需要这个引用的数据,没有其他所有的冗余代码的麻烦。

说完看了看四周,我发现瑞恩·尼迈耶这个非常诱人的解决了类似的问题在几年前,但小提琴抛出一个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没有得到拖后调用,所以函数甚至没有得到调用。

我也看了在谷歌论坛淘汰赛排序,发现这个线程 ,这就是我得到的克隆位从-但我不能让它适合我的使用情况!

一个成功的回答这个问题的结果,当只有在车自行车,离开productArray因为它是和有listArray设置为[{'productID':1}]

这是我张贴的问题上所以第一次,所以请去容易对我,如果我没有说清楚! 我已经感谢社会,因为它在解决自己的问题好多年没有这么有用的:)

Answer 1:

你会希望你的映射选项看起来是这样的:

var options = {
    productArray: {
        create: function(mappingData) {
            var result = ko.mapping.fromJS(mappingData.data);

            result.clone = function() {
                return { productID: result.productID() };
            };

            return result;
        }
    }
};

或者,您可以创建产品构造上有一个克隆功能,就回到像return new Product(mappingData.data);

我有克隆上面只返回产品ID作为不可观察的,除非你需要该值变化的反应应该是罚款。

你的第一行calculatedName那么函数将需要是这样的:

VAR X = ko.unwrap(arg.productID);

这将检索值是否是观察或没有,所以该函数可以工作对productArray或listArray。

http://jsfiddle.net/rniemeyer/hLqctg4L/



文章来源: knockout draggable sortable mapping clone alteration