2012-07-16 60 views
1

我有dojox.form.CheckedMultiSelectDojo。从JSON设置属性作为HTML属性

<span dojoType="dojo.data.ItemFileReadStore" url="..." jsId="listStore"></span> 
<select id="unsubscribedList" class="soria" dojoType="dojox.form.CheckedMultiSelect" 
multiple="true" onchange="..." store="listStore" title="title"></select> 

JSON的店面看起来像:

{"items":[{"title":"ESC, MICHAEL (MESC)","value":"1000","label":"ESC, MICHAEL"},...}] 
,"totalCount":7,"endList":7,"label":"label","identifier":"value","startList":1} 

我怎样才能从JSON设置为 “items.title” 属性作为HTML属性 “称号”到每个复选框将为CheckedMultiSelect创建?

回答

1

试试这个:

dojo.ready(function() { 
    // 1.7.2 template has 'dojoxCheckedMultiSelectHidden' className on its select from template. 
    // if this is different (inspect your DOM after onload), adapt the query selector 
    var opts = dojo.query('.dojoxCheckedMultiSelectHidden option'), 
     store = dijit.byId('listStore'); 
    store.fetch({ onComplete: function(items) { 
     for(var i = 0; i < items.length; i++) { 
      if(!opts[i]) continue; 
      else opts[i].title = store.getValue(items[i], 'title'); 
     } 

    }}); 
}); 

它所做的是,它

  1. 迫使商店从服务器获取数据,返回项目数组他们(query: {id:'*'}
  2. 迭代,将标题放置在选项上。

如果您要通过标记部署选项,标题属性不会与此小部件映射,只有作为配置参数允许的标记有效。换句话说,标题属性被丢弃。该小部件相当差,并没有更新dojotoolkit的其余部分,所以它不是那么灵活。

当分析器运行在的标记,它忽略了title属性(您的标记被摧毁,由CheckedMultiSelect模板更换,见dojobase/DojoX中/表格/资源/ CheckedMultiSelect.html)。

因此,解决方案是 - 保持JS数组,映射与

// array with indexes matching the options from markup 
var titles = [ "title1", "title2", "title3" ]; 

dojo.addOnLoad(function() { 

    // note, that the '_0' is a generic ID, config options are not accepting the id attribute either 
    // calling private function, again not correctly layed out 
    var childObjects = dijit.byId('dojox_form_CheckedMultiSelect_0')._getChildren(); 

    dojo.forEach(childObjects, function(optObject, index) { 
    optObject.labelNode.title = titles[index]; 
    }); 

}); 
+0

怎么就这样犹豫不决?有问题,或者你有EM排序? – mschr 2012-07-27 16:52:59