继续我之前的question。
我正在使用dobcto formbuilder插件。此插件使用rivets.js和backbone.js。
在我之前的问题中,我无法弄清楚出现了什么问题但是在12 hours
对该插件代码进行研究之后。我发现问题是当使用一些弹出窗口将数据添加到textbox
时。
当我们通过键盘手动添加时,更改事件会成功触发,文本框数据会添加到JSON结果中。
我浏览了rivets.js文档并阅读了有关它的所有内容。但是这个插件使用旧版本的rivets.js,我现在不想更新,因为项目提交日期即将来临,我还有很多工作要做。
(function () {
rivets.binders.input = {
publishes: true,
routine: rivets.binders.value.routine,
bind: function (el) {
return $(el).bind('input.rivets', this.publish);
},
unbind: function (el) {
return $(el).unbind('input.rivets');
}
};
rivets.configure({
prefix: "rv",
adapter: {
subscribe: function (obj, keypath, callback) {
callback.wrapped = function (m, v) {
return callback(v);
};
return obj.on('change:' + keypath, callback.wrapped);
},
unsubscribe: function (obj, keypath, callback) {
return obj.off('change:' + keypath, callback.wrapped);
},
read: function (obj, keypath) {
if (keypath === "cid") {
return obj.cid;
}
return obj.get(keypath);
},
publish: function (obj, keypath, value) {
if (obj.cid) {
return obj.set(keypath, value);
} else {
return obj[keypath] = value;
}
}
}
});
}).call(this);
即使阅读过铆钉文档后,我也无法理解这段代码。那么请告诉我如何更改此初始化过程,以便它接受弹出窗口添加的文本框文本?
答案 0 :(得分:0)
我谦卑地承认我不能遵循上述逻辑。但是,我发现将propertychange
或input
绑定到事件会产生比change
更好的结果。
(function () {
rivets.binders.input = {
publishes: true,
routine: rivets.binders.value.routine,
bind: function (el) {
return $(el).bind('input.rivets', this.publish);
},
unbind: function (el) {
return $(el).unbind('input.rivets');
}
};
rivets.configure({
prefix: "rv",
adapter: {
subscribe: function (obj, keypath, callback) {
callback.wrapped = function (m, v) {
return callback(v);
};
return obj.on('change:' + keypath, callback.wrapped);
},
this.on('propertychange input', function (changeSwap) { unsubscribe: function(obj, keypath, callback) { return obj.off('change:' + keypath, callback.wrapped); }, });,
read: function (obj, keypath) {
if (keypath === "cid") {
return obj.cid;
}
return obj.get(keypath);
},
publish: function (obj, keypath, value) {
if (obj.cid) {
return obj.set(keypath, value);
} else {
return obj[keypath] = value;
}
}
}
});
}).call(this);