Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 主干网中的动态UI元素创建_Jquery_Html_Backbone.js - Fatal编程技术网

Jquery 主干网中的动态UI元素创建

Jquery 主干网中的动态UI元素创建,jquery,html,backbone.js,Jquery,Html,Backbone.js,我在主干中动态生成this.ui元素: var View = Backbone.View.extend({ el : '[data-container]', ui : { //Needs to be dynamically generated }, 到目前为止,我是这样做的: this.ui.protocolSetter = new $.fn.init("#protocol-" + id); 那很好用。现在的问题是,除了使用自定义属性外,如何执行相同的操作 如果我有这个带有数据属性的HTML

我在主干中动态生成this.ui元素:

var View = Backbone.View.extend({
el : '[data-container]',
ui : {
//Needs to be dynamically generated
},
到目前为止,我是这样做的:

this.ui.protocolSetter = new $.fn.init("#protocol-" + id);
那很好用。现在的问题是,除了使用自定义属性外,如何执行相同的操作

如果我有这个带有数据属性的HTML5: 按钮数据something=“1”type=“button”

我想动态绑定元素,但要使用自定义属性

到目前为止,我已经尝试了许多组合,包括:

this.ui.protocolSetter = new $.fn.init.(e.currentTarget.dataset.something);

但到目前为止,一切似乎都不起作用。我做错了什么

以下是更清楚地说明问题的小提琴:


jsfiddle.net/vA2N4

也许您正在寻找类似的东西:

newBinder: function(e) {
    var id = e.currentTarget.id.replace(/^btn-/, '');
    this.ui.protector = this.$('[data-something=' + id + ']');
}
注意,我切换到
replace
id
中提取数字,这可能比
parseInt
更可靠。我还切换到将选择器本地化到视图的
el
,这样可以避免在尝试查找尚未添加到DOM的内容时出现问题

我还建议您在构造函数内部创建
ui
,而不是作为视图“类”的一部分。这:

将为视图的每个实例提供其自己的
ui
,而:

var View = Backbone.View.extend({
    ui : { },
    //...
ui
附加到视图的原型,因此视图的所有实例都将共享一个
ui
。这对你来说可能不是问题,但坏习惯就是坏习惯


演示:

你能发布一些代码来进一步说明这个问题吗?在使用ui对象时,是否存在ui对象没有相应jquery对象的问题?我的想法是,jquery可能在解析视图时执行,而不是在呈现视图时执行。。。因此#protocol元素不会呈现为yetHello Matty。DOM已呈现并准备就绪。我成功地使用HTML元素的ID将其绑定到UI对象。话虽如此,我确信多姆已经准备好了。例如,同一个元素有一个ID和一些数据(html5自定义)。我可以使用ID绑定它,但问题是我不知道如何使用自定义属性绑定它。由于某些原因,我在第一个问题中插入的HTML没有显示出来,所以让我尝试重新创建它,希望它能为我面临的问题提供更清晰的解释。也许在jsfiddle.net或jsbin.com上进行一点演示会有所帮助。现在我们看不到足够多的事情会有多大的帮助。这是小提琴手,它不是功能演示,但它更清楚地显示了我的问题。你想这样做吗?
initialize: function() {
    this.ui = { };
}
var View = Backbone.View.extend({
    ui : { },
    //...