【问题标题】:Backbone Model Set Attribute on Drop Event删除事件上的主干模型集属性
【发布时间】:2012-12-16 20:45:25
【问题描述】:

这可能是因为我是 javascript 新手,我只是不知道正确的语法,但我无法使用当前语法在此 Drop Event 上设置我的主干模型属性。有什么建议么?我已经使用 handleDrop 进行了一些测试,并且能够设置和保存模型实例,但不能使用 handleDrop 函数中的当前代码。

欢迎其他关于更有效的写作方式的建议:)

        //Set the data contained by the draggable elements
        var sourceID;
        var payloads = {
            poolpricedraggable: "poolprice",
            nonedraggable: "none"
        };

        //Set the data contained in the droppable elements
        var targetID;
        var targets = {
            panelone: "panel_one:",
            paneltwo: "panel_two:",
            panelthree: "panel_three:",
            panelfour: "panel_four:",
            panelfive: "panel_five:",
            panelsix: "panel_six:"              
        }

        //Create variable for all draggable & droppable elements
        var element = function(id) { return document.getElementById(id); }

        //Create event handlers for all drag and drop events
        function handleDragStart(event) {
            sourceID = this.id;
        }
        function handleDrop(event) {
            if(event.preventDefault) event.preventDefault();
            targetID = this.id;
            var dataattribute = targets[targetID];
            var datavalue = payloads[sourceID];
            var data = dataattribute + " " + datavalue;
          preflist.set(data);
            preflist.save();
        }

        //Add listeners for those events to the correct dashboard elements
        element('poolpricedraggable').addEventListener('dragstart', handleDragStart, false);

        element('panelone').addEventListener('drop', handleDrop, false);
        element('paneltwo').addEventListener('drop', handleDrop, false);
        element('panelthree').addEventListener('drop', handleDrop, false);
        element('panelfour').addEventListener('drop', handleDrop, false);
        element('panelfive').addEventListener('drop', handleDrop, false);
        element('panelsix').addEventListener('drop', handleDrop, false);

【问题讨论】:

    标签: javascript javascript-events backbone.js


    【解决方案1】:

    我假设preflist 是一个主干模型。你的错误发生在这里:

    var data = dataattribute + " " + datavalue;
    preflist.set(data);
    

    这里的data 变量是一个字符串,但是Backbone 模型set -function 将属性哈希作为键值对

    设置 model.set(attributes, [options])

    在模型上设置属性的散列(一个或多个)...

    所以你应该这样做:

    // var data = dataattribute + " " + datavalue; REMOVE THIS
    var data = {};
    data[dataattribute] = datavalue;
    preflist.set(data);
    

    编辑,mu 太短的评论更好

    根据Backbone.js docs

    您也可以传递单独的键和值。

    显然,这是一个更好的解决方案:

    preflist.set(dataattribute, datavalue);
    

    希望这有帮助吗?

    【讨论】:

    • 你是对的,杰克。惊人的!一切正常!对于将这篇文章用作资源的任何人,我在“targets”变量中的每个值上都包含了一个冒号,在遵循 jakee 的说明时需要将其删除。谢谢杰克!
    • 你也可以preflist.set(dataattribute, datavalue),因为"you may also pass individual keys and values"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多