1

初めての Ember アプリを作成していますが、データに少し問題があります。私のオプションは次のようです:

私は行く方法は 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 インスタンス内のデータをどのようにループするのでしょうか?

4

1 に答える 1

0

あなたのしたことは間違っています(私はそう思います)。App.Posts のインスタンスを作成しました。そのオブジェクトのコンテンツは配列です。あなたがすべきだったのは、たとえば、App.Post (単数) のインスタンスを作成し、それらを配列に入れることです。あなたがしたことは、App.Postsインスタンスがコントローラーのコンテンツに割り当てられたオブジェクトであるため、それは1つの(配列ではない)オブジェクトであり、反復しようとしているビューではそれを繰り返したい場合は、配列ではありません。試してください:

{{#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}}

そして、それが機能するかどうかを確認してください。しかし、私が言ったことも試してみてください。

于 2013-11-01T15:15:58.767 に答える