这可能是因为我是javascript的新手,而我只是不知道正确的语法,但是我无法使用当前语法将此主干模型属性设置在此Drop事件上。有什么建议?我已经使用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);
答案 0 :(得分:4)
我假设preflist
是一个Backbone模型。你的错误发生在这里:
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);
希望这有帮助吗?