0

我想显示一个包含来自 JSON 文件的数据的列表。我会使用修改后的适配器。这是到目前为止的代码,包括测试 json 文件的路径(因为我希望在不使用 FIXTURES 的情况下获得一些帮助)

我不确定如何使用 Ember-Data 为结果推送对象。我知道我可能仍然没有得到 Ember-Data 的一些概念。

我的问题是:如何根据以下代码从 JSON 文件中获取列表。

JavaScript

    App = Em.Application.create();

    App.store = DS.Store.create({
      revision: 4,
      adapter: App.adapter
    });

    App.adapter = DS.Adapter.create({

        findAll: function (store, type) {
            console.log('finding');
            var url = type.url;
            $.getJSON(url, function(data) {
                store.loadMany(type, data);
            });

        }

    });

    App.Person = DS.Model.extend({
        fName: DS.attr('string'),
        surname: DS.attr('string'),
        url: 'test.json',
    });
    App.personController = Ember.ArrayController.create({
        content: [],
        init: function(){
            this._super();// create an instance of the person model
            this.set('person', App.store.findAll(App.Person));
        },
    });

HTML

<script type="text/x-handlebars">
   {{#each App.personController}}            
        <p>{{fName}} {{surname}}</p>
    {{/each}}
</script>

编辑

我已经在 @pauldechov 建议上更新了 jsfiddle 中的代码但仍然没有运气。

这是 test.json 的内容,因此可以重新创建整个应用程序:

   [{"name": "Bruce","surname": "Banner"}, 
   {"name": "Peter","surname": "Parker"},
   {"name": "Natasha","surname": "Romanoff"},
   {"name": "Steve","surname": "Rogers"},
   {"name": "Tony","surname": "Stark"}]
4

2 回答 2

0
  • url 属性应该这样定义:

    App.Person = DS.Model.extend({
        fName: DS.attr('string'),
        surname: DS.attr('string'),
    }).reopenClass({ url: 'test.json' });
    

    ...作为实例变量而不是作为类变量(参见示例:https ://github.com/emberjs/data#find )。您定义它的方式(或者如果您使用.reopen({...})而不是.reopenClass({...}),则可以通过(特定的)person.url 而不是 type.url 访问它。

  • AFAIK 你不能将 .json 文件添加到 jsfiddle 的资源中;它将无法访问。查询 test.json 的完整 url 产生了跨域问题。

  • 您可能需要将模型放在 App.adapter 上方,App.store 上方。如果仍然失败,请尝试此操作。

  • 外围观察:test.json 中的“name”与代码中的“fName”?

于 2012-08-12T16:17:12.060 回答
0
App.personController = Ember.ArrayController.create({
    content: [],
    init: function(){
        this._super();// create an instance of the person model
        this.set('person', App.store.findAll(App.Person));
    },
});

为什么要设置person?不应该设置content吗?

于 2012-10-02T13:27:51.100 回答