2013-11-01 2 views
1

Я собираю свое первое приложение Ember и испытываю небольшие проблемы с данными. Похоже, мои варианты:Как использовать экземпляр Ember.Object с циклом #each

  • через Ember данных (звучит, как это not ready for production и possibly broken)
  • через Ember.Object (имеющий проблемы Перебор эти)
  • через обычный массив JS (I подозреваю, что это слишком упрощенно)

Я предполагаю, что путь является экземпляром Ember.Object:

// Attempt to modify the Blog Tutorial (http://emberjs.com/guides/) to use Ember.Object for data 
App.Posts = Ember.Object.extend([ 
{ 
    id: '1', 
    title: "Rails is Omakase", 
    author: { name: "d2h" }, 
    date: new Date('12-27-2012'), 
    body: "I want this for my ORM, I want that for my template language, and let's finish it off with this routing library. Of course, you're going to have to know what you want, and you'll rarely have your horizon expanded if you always order the same thing, but there it is. It's a very popular way of consuming software.\n\nRails is not that. Rails is omakase." 
}, { 
    id: '2', 
    title: "The Parley Letter", 
    author: { name: "d2h" }, 
    date: new Date('12-24-2012'), 
    body: "A long list of topics were raised and I took a time to ramble at large about all of them at once. Apologies for not taking the time to be more succinct, but at least each topic has a header so you can skip stuff you don't care about.\n\n### Maintainability\n\nIt's simply not true to say that I don't care about maintainability. I still work on the oldest Rails app in the world." 
} 
]); 
posts = App.Posts.create(); 

Но тогда у меня возникают проблемы зацикливания через эти данные:

<!-- === POSTS === --> 
<script type="text/x-handlebars" id="posts"> 
    <table class='table'> 
    <thead> 
     <tr><th>Recent Posts</th></tr> 
    </thead> 
    {{#each model}} 
     <tr><td> 
     {{#link-to 'post' this}}{{title}} <small class='muted'>by {{author.name}}</small>{{/link-to}} 
     </td></tr> 
    {{/each}} 
    </table> 

    {{outlet}} 
</script> 

Мой инспектор консоли читает:

Denying load of chrome-extension://ganlifbpkcplnldliibcbegplfmcfigp/scripts/vendor/jquery/jquery.min.map. Resources must be listed in the web_accessible_resources manifest key in order to be loaded by pages outside the extension. (index):1 
DEBUG: -------------------------------        ember-1.0.0-rc.8.js:382 
DEBUG: Ember.VERSION : 1.0.0-rc.8          ember-1.0.0-rc.8.js:382 
DEBUG: Handlebars.VERSION : 1.0.0          ember-1.0.0-rc.8.js:382 
DEBUG: jQuery.VERSION : 1.9.1           ember-1.0.0-rc.8.js:382 
DEBUG: -------------------------------        ember-1.0.0-rc.8.js:382 
Assertion failed: Expected hash or Mixin instance, got [object Array] ember-1.0.0-rc.8.js:382 
Assertion failed: The value that #each loops over must be an Array. You passed <App.Posts:ember284> ember-1.0.0-rc.8.js:382 
Uncaught TypeError: Object [object Object] has no method 'addArrayObserver'  ember-1.0.0-rc.8.js:21860 
Ember Debugger Active 
Resource interpreted as Script but transferred with MIME type text/html: "http://www.superfish.com/ws/sf_main.jsp?dlsource=tduqbwo&userId=834F74FF-83A8-4EDB-BC8A-9433A559E216". 

Так как же один цикл по данным в экземпляре Ember.Object?

ответ

0

Что вы сделали неправильно (я думаю). Вы создали экземпляр App.Posts, содержимое этого объекта - это массив. То, что вам нужно было сделать, можно сказать, создать экземпляры App.Post (единственного числа) и поместить их в массив. Дело в том, что вы сделали, это то, что экземпляр App.Posts - это объект, который вы назначили содержимому контроллера, поэтому он является только объектом ONE (а ​​не массивом) и в представлении, которое вы пытаетесь выполнить итерацию через это, но это не является массивом, если вы хотите перебрать, попробуйте:

{{#each post in model.content}} 
    <tr><td> 
    {{#link-to 'post' this}}{{post.title}} <small class='muted'>by {{post.author.name}}</small>{{/link-to}} 
    </td></tr> 
{{/each}} 

и посмотреть, если он работает. Но попробуйте, что я сказал, это лучше.

Смежные вопросы