Ember.js 如何在视图中显示带有余烬数据的JSON findAll?

Ember.js 如何在视图中显示带有余烬数据的JSON findAll?,ember.js,ember-data,Ember.js,Ember Data,我想显示一个由JSON文件中的数据填充的列表。我会使用修改过的适配器。以下是到目前为止的内容,包括测试json文件的路径(因为我希望在不使用fixture的情况下获得一些帮助) 我不确定如何使用余烬数据推送对象以获得结果。我知道我可能还没有得到一些余烬数据的概念 我的问题是:如何根据以下代码从JSON文件中获取列表 JavaScript App = Em.Application.create(); App.store = DS.Store.create({ revi

我想显示一个由JSON文件中的数据填充的列表。我会使用修改过的适配器。以下是到目前为止的内容,包括测试json文件的路径(因为我希望在不使用fixture的情况下获得一些帮助)

我不确定如何使用余烬数据推送对象以获得结果。我知道我可能还没有得到一些余烬数据的概念

我的问题是:如何根据以下代码从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>
  • url属性应定义为:

    App.Person = DS.Model.extend({
        fName: DS.attr('string'),
        surname: DS.attr('string'),
    }).reopenClass({ url: 'test.json' });
    
    …作为实例变量而不是类变量(请参见示例:)。按照您定义它的方式(或者如果您使用
    .reboon({…})
    而不是
    .rebookClass({…})
    ,则可以通过(特定的)person.url而不是type.url访问它

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

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

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


为什么要设置
person
?是否应该设置
content

我尝试了您的建议,但仍然无法获取数据。您可以尝试一下代码吗?关于JSIDLE不允许跨域链接,您是对的,我只是尝试将json数据设置为可访问以进行修订,但我现在已经更新了问题,因此所有信息都是正确的可用。非常感谢所有帮助!我最初没有用小提琴回复,因为当时我没有想到如何绕过AJAX调用(实际上您的服务器不允许)。请参见。a)我看到
App.store
必须在下面定义
App.adapter
——以前对此不确定。b) 对不起,我不是想暗示
type
应该是适配器定义中的
person
。c) 不需要显式加载
{{action}}
,所以我更新了您原来的小提琴。事实上,您可以避免重写
init
,只需拥有
内容:App.store.findAll(App.Person)
。太棒了!有趣的是,在余烬中,顺序似乎并不影响结果,而事实上(逻辑上)它确实如此。非常感谢您抽出时间,并为所有伟大的建议!为了提高你的文章质量,请包括你的文章将如何/为什么解决这个问题。因为
this.set('person')
似乎不正确
this.set('content')
App.Person = DS.Model.extend({
    fName: DS.attr('string'),
    surname: DS.attr('string'),
}).reopenClass({ 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));
    },
});