Javascript 渲染后观察列表中元素的canjs附加控件

Javascript 渲染后观察列表中元素的canjs附加控件,javascript,list,canjs,canjs-control,canjs-list,Javascript,List,Canjs,Canjs Control,Canjs List,一般来说,问题是我在控件中的单击操作不起作用 在下面的代码中,您可以看到我使用Observe.list生成包含项的列表时的情况,所以当新元素自动出现在列表上(下面的视图)并且它在init func的第一个控件中生成时,它会被更新 同样在第一个控件中,当新元素被放在列表上时,我将控件附加到它上,为新生成的元素使用“{files}add”方法 问题是,在第二个控件中,单击事件将不起作用。我想是因为我试着在自动重新生成观察之前这么做。列表已经完成。证明是jquery还没有定义元素 是否可能在自动重新生

一般来说,问题是我在控件中的单击操作不起作用

在下面的代码中,您可以看到我使用Observe.list生成包含项的列表时的情况,所以当新元素自动出现在列表上(下面的视图)并且它在init func的第一个控件中生成时,它会被更新

同样在第一个控件中,当新元素被放在列表上时,我将控件附加到它上,为新生成的元素使用“{files}add”方法

问题是,在第二个控件中,单击事件将不起作用。我想是因为我试着在自动重新生成观察之前这么做。列表已经完成。证明是jquery还没有定义元素

是否可能在自动重新生成Observe.List呈现控件之前附加控件({files}add')?我应该如何以适当的方式控制新元素?我能不能考虑一下

define(['canjs/can',
“text!platform/presenter/views/file_list.ejs”,
“平台/演示者/文件”,
“平台/演示者/节目”,],
功能(can、EjsFileList、控制文件、控制显示){
var file_list=can.Control({
},{
“init”:函数(){
“严格使用”;
can.view.ejs('EjsFileList',EjsFileList);
can.view(“EjsFileList”{
文件:this.options.files
},$.proxy(函数(片段){
html(片段);
}这),;
},
“{files}add”:函数(列表、事件、已添加){
list.forEach($.proxy)函数(el){
log($('#file-'+el.id));
//这是一个问题
//[上下文:文档,选择器:“#file-80”,jquery:“1.9.1”,构造函数:function,init://function…]
//上下文:文档
//选择器:“#文件-80”
//__原型:对象[0]
新控制文件(“#文件-”+el.id{
“文件”:el,
“文件”:列表
});
}这),;
},
“{files}remove”:函数(a、b、removed){
删除。forEach(函数(元素){
$('#file-'+element.id).remove();
});
}
});
返回文件列表;
});
列表的视图:


  • class=”“>
  • 列表元素的控件。问题来了

    define(['canjs/can',
    “平台/模型/文件”,
    “平台/演示者/节目”,
    “text!platform/presenter/views/file.ejs”,
    ],
    功能(can、modelFile、ControlShow、EjsFile){
    var list=can.Control({
    默认值:{
    loaderClass:“正在加载”,
    模型:模型文件
    }
    },{
    “init”:函数(){
    “严格使用”;
    console.log(this.element);
    //[上下文:文档,选择器:“#file-73”,jquery:“1.9.1”,构造函数:函数,初始化:函数…]
    },
    “img click”:函数(){
    log('应该工作,但永远不会到达这里');
    }
    });
    退货清单;
    });
    
    我找到了解决方案

    如果您在canjs中使用动态列表并希望在每个元素上附加控件,则应创建如下视图:

    <% files.each(function(file){  %>
        <li id="file-<%= file.id %>" <%= (el) -> can.data(el, 'file', file)  %>
        <%= function(element){ new ControlFile(element, {file: file}); } %>>
        <img class="loading" />
    </li>
    <% }); %>
    
    
    
  • >

  • 如您所见,我在列表上设置了控件,但我需要传递以查看控件使用的每个变量。

    第二个控件是否绑定到列表的元素?它绑定到一个元素,而不是所有列表。