2014-12-12 3 views
0

У меня есть эти данные:moon.DataList в moon.Accordion в enyojs

 
.... 
    [ 
     {"id_category": 1, 
     "name": "Category 01", 
     subcategories:[ 
      {"id_sub":1, "name":"suba 1"}, 
       {"id_sub":2, "name":"subaa 2"} 
      ]}, 
     {"id_category": 2 
     ,"name": "Category 02" 
     ,subcategories:[ 
      {"id_sub":1, "name":"sub 1"}, 
      {"id_sub":2, "name":"sub 2"} 
     ]} 
    ] 
.... 

, и я хочу, чтобы установить его в moon.Accordion у меня есть этот код: Первые мои компоненты:

 
.... 
    enyo.kind({ 
     name: "myapp.ResultList", 
     kind: "moon.DataList", 
     selectionProperty: "selected", 
     mixins: ["Group"], 
     create: function() { 
      this.inherited(arguments); 
      this.addClass(this.orientation); 
     } 
    }); 
    enyo.kind({ 
     kind: "moon.Accordion", 
     name: "myapp.ResultAccordion", 
     content: "", 
     mixins : ["moon.DataList"], 
     bindings: [ 
      {from: ".model.name", to:".content"} 
     ], 
     subcategories:[], 
     create: function() { 
      this.inherited(arguments); 
     }, 
     modelChanged: function() { 
      this.inherited(arguments); 
      if (!this.model) { 
       return; 
      } 
      this.model.set("item", this); 
      this.subcategories = this.model.attributes.subcategories; 
      this.controller = new enyo.Collection([]); 
      var objects=[]; 
      for(var sc in this.subcategories){ 
       var m = new myapp.SubCategoryModel(this.subcategories[sc]); 
       objects.push(m); 
      } 
      this.controller.add(objects); 
      this.resized(); 
     } 
    }); 
    enyo.kind({ 
     name: "myapp.ResultAccordionItem", 
     bindings: [ 
      {from: ".model.name", to:".content"} 
     ] 
    }); 
.... 

затем в панели:

 
.... 
    enyo.kind({ 
    name: "myapp.PartialPanel", 
    classes: "moon enyo-unselectable main-view enyo-fit", 
    kind: "moon.Panels", 
    .... 
    components:[{ 
     kind: "myapp.ResultList", 
     style: "position: inherit !important;", 
     fit: true, 
     controller: ".app.$.categoryCollection", 
     components: [{ 
      kind: "myapp.ResultAccordion", 
      onSpotlightRight:"onFocusCategoryRight", 
      components:[{ 
       kind: "myapp.ResultAccordionItem" 
      }] 
     }] 
    .... 
.... 

в мой контроллер, установить мои данные:

 
.... 
    setdata: function(){ 
     var test= { 
      "count": 1, 
      "next": null, 
      "previous": null, 
      "results": [ 
       {"id_category": 1, "name": "Category 01", 
        subcategories:[ 
         {"id_sub":1, "name":"suba 1"}, 
         {"id_sub":2, "name":"subaa 2"} 
        ] 
       }, 
       {"id_category": 2,"name": "Category 02", 
        subcategories:[ 
         {"id_sub":1, "name":"sub 1"}, 
         {"id_sub":2, "name":"sub 2"} 
        ] 
       } 
      ]}; 
      var models = test.results; 
      this.next = test.next; 
      this.previous = test.previous; 
      this.count = test.count; 
      var objects = []; 
      for(var p in models){ 
       console.log(models[p]); 
       var m = new myapp.CategoryModel(models[p]); 
       objects.push(m); 
      } 
      this.app.controllers.categoryCollection.add(objects); 
      return objects; 
     .... 
    ... 
.... 

Но только отрисуйте категории, а не мои подкатегории, пожалуйста, помогите мне.

+0

В этом примере происходит слишком много, и некоторые вещи отсутствуют (например, CategoryModel. Я не уверен, что миксины были предназначены для можно использовать так. Можете ли вы создать jsfiddle с полным примером? – Pre101

ответ

0

Проблема в том, что вы не можете использовать mixins для объединения типов компонентов вместе. Есть некоторые очень специфические миксины, которые вы можете использовать, добавляя функциональность к существующим видам. Проверьте этот список Mixins: http://enyojs.com/docs/latest/#/namespaces:enyo-mixins

Кроме того, вы можете заменить весь этот код:

 this.subcategories = this.model.attributes.subcategories; 
     this.controller = new enyo.Collection([]); 
     var objects=[]; 
     for(var sc in this.subcategories){ 
      var m = new myapp.SubCategoryModel(this.subcategories[sc]); 
      objects.push(m); 
     } 
     this.controller.add(objects); 

с:.

 this.controller = new enyo.Collection({model: "myapp.SubCategoryModel"}); 
     this.controller.add(this.subcategories); 

(Это предполагает, что вы находитесь на 2.5.1 Если это так , вы также можете опустить ведущую точку на ваших привязках.)