2012-06-20 29 views
1

我用ember-0.9.8.1.js做了一些測試,下面的代碼按預期工作。 之後,我讀了關於路由器,並且路由器代碼僅在當前ember-latest.js(16.06.2012)中可用。 我使用此版本測試下面的代碼。 問題是列表呈現:收藏查看當前最新的ember錯誤?

<div id="ember143" class="ember-view"> 
    <ul id="PersonList" class="ember-view ListBox"> 
     <li id="ember179" class="ember-view"> 
     <script id="metamorph-0-start" type="text/x-placeholder"></script> 
     <script id="metamorph-0-end" type="text/x-placeholder"></script> 
     </li> 
     <li id="ember183" class="ember-view"> 
     <script id="metamorph-1-start" type="text/x-placeholder"></script> 
     <script id="metamorph-1-end" type="text/x-placeholder"></script> 
     </li> 
     <li id="ember187" class="ember-view"> 
     <script id="metamorph-2-start" type="text/x-placeholder"></script> 
     <script id="metamorph-2-end" type="text/x-placeholder"></script> 
     </li> 
     <li id="ember191" class="ember-view"> 
     <script id="metamorph-3-start" type="text/x-placeholder"></script> 
     <script id="metamorph-3-end" type="text/x-placeholder"></script> 
     </li> 
     </ul> 
    </div> 

但是是空的。 東西與

模板:Ember.Handlebars.compile( 「{{content.name}}」),

不能正常工作或者某些語法方面發生了變化。

的代碼線

的console.log( 「內容」,this.get( '內容'));

單擊處理程序顯示

,正確的內容是存在的,但

Ember.Handlebars.compile( 「{{content.name}}」),

不會呈現內容。

這是一個錯誤???

JavaScript代碼:

var App = Em.Application.create({ 

    ready: function(){ 
     App.personListController.getData(); 
    } 
    }); 


    // Model Objects 

    App.Person = Ember.Object.extend({ 
     name: null, 
     myTickets: null, 
     selected: false 
    }); 


    // Liste von Personen anlegen 

    App.personListController = Ember.ArrayController.create({ 

    getData: function(){ 

     $.get('json/person.json', function(data) { 
      var personList = Ember.A([]); 
      data.forEach(function(item) { 
       var p = App.Person.create({ 
        'name': item.name, 
        'myTickets': null, 
        'selected': false 
       }); 
       personList.pushObject(p); 
      }); 
      App.personListController.set('content', personList); 
     }) 
    }, 
    resetSelection: function(){ 
     App.personListController.content.forEach(function(item){ 
      item.set('selected',false); 
     }) 
    }, 
    selectedPerson: null 
    }); 


    App.PersonList = Ember.CollectionView.extend({ 
     tagName: 'ul', 
     contentBinding: 'App.personListController.content', 
     classNames: ['ListBox'], 
     mouseenter: function(event){ 
     console.log("PersonList.content:",this.get('content')); 
     }, 

    itemViewClass: Ember.View.extend({ 
     template: Ember.Handlebars.compile("{{content.name}}"), 
     classNameBindings: ['selected:selected'], 
     selectedBinding: 'content.selected', 
     click: 
      function(event){ 
       App.personListController.resetSelection() ; 
       this.setPath('content.selected',true); 
       App.personListController.set('selectedPerson',this.get('content')); 
       console.log("ItemViewInfo selected:",this.getPath('content.selected')); 
       console.log("content:",this.get('content')); 
       //this.set('isSelected',true); 
      } 
     }) 
    }); 

HTML:

<script type="text/x-handlebars"> 
    {{#view App.PersonList id="PersonList"}} 

    {{/view}} 
</script> 

回答

2

這是因爲對於一個view查找方面的最新提交更改。現在,如果您想查找view上的某個地產,則必須預先登記view。請參見提交8a6c6中的文檔更新。因此

模板變爲

template: Ember.Handlebars.compile("{{view.content.name}}") 

看到http://jsfiddle.net/pangratz666/DsdHU/

湯姆戴爾有一個Gist這解釋了進一步的變化。

0

latest-ember.js(以及ember-1.0.pre.js)不再包括把手,你必須自己包含它。

你還必須現在自己啓動事件循環: !! - >似乎你不需要了.. !!

App.initialize(); 

..the相關的jsfiddle:http://jsfiddle.net/aGMzD/