2012-03-11 5 views
0
var App = Em.Application.create(); 

App.store = DS.Store.create({ 
    adapter: DS.RESTAdapter.create() 
}); 

App.Todo = DS.Model.extend({ 
    title: DS.attr('string') 
}); 

App.set('Todos', DS.ModelArray.create({ 
    store: App.store, 
    type: App.Todo, 
    content: [] 
})); 

var todo = App.store.createRecord(App.Todo, { 
    title: 'Cleanup' 
}); 
App.get('Todos').pushObject(todo); 

App.MyView = Em.View.extend({ 
    todosBinding: 'App.Todos' 
}); 

    <script type="text/x-handlebars"> 
    {{#view App.MyView}} 
     {{#each todos}} 
     Todo: {{title}} 
     {{/each}} 
    {{/view}} 
    </script> 

예상 출력 :엠버 데이터가 제대로 표시되지 ModelArray

도도 : 정리

무엇 내가 실제로 얻을 것은 :

도도 :

그만큼 title 속성이 표시되지 않습니다. App.Todos.content를 검사하면 올바른 제목의 개체가 나타납니다. 보기에 왜 나타나지 않습니까?

답변

2

좀 더 표준 아키텍처를 제공하기 위해 약간의 코드를 변경했습니다. 특히 RestAdapter를 사용할 때 컨트롤러를 사용하여 데이터를 검색하고 모델 배열을 직접 인스턴스화하지 않아야합니다.이 샘플에서는 Restadapter를 fixtureAdapter로 대체하여 오프라인에서 실행되도록했습니다.

var App = Em.Application.create(); 

App.store = DS.Store.create({ 
    revision: 3, 
    adapter: DS.fixtureAdapter //DS.RESTAdapter.create() 
}); 

App.Todo = DS.Model.extend({ 
    title: DS.attr('string') 
}); 

App.Todo.FIXTURES = [{ 
    title: 'Cleanup' 
}]; 

App.myController = Em.ArrayController.create({ 
    init: function() { 
     this.set('content', App.store.findAll(App.Todo)); 
    } 
}); 

App.MyView = Em.View.extend({ 
    todosBinding: 'App.myController.content' 
}); 
+0

예를 들어 컨트롤러에있는 기존 항목의 목록을 가져와 주셔서 감사합니다. 그리고 그것은 나를 위해 잘 작동합니다. App.store.createRecord를 통해 생성 된 항목을 표시하는 데는 효과가 없습니다. – Dziamid

+0

많이 파지는 못했지만 문제는 사용자가 직접 ModelArray를 인스턴스화 한 것이 원인이라고 생각합니다. 저장소가 확실히 정확하게 채워지지 않아서 찾기가 기록을 놓치게됩니다. –

+0

감사합니다. 문제는 ModelArray로 객체를 밀어 넣는 것 같습니다. 'App.store.createRecord (App.Todo, {title : 'Washup'});'처럼 obejct를 만들면 자동으로 정확하게 표시됩니다. – Dziamid

관련 문제