2013-02-13 54 views
3

我使用ember.js 1.0.0-PRE4,烬数据的修订11.重复数据

我有以下型号:

App.DbProcess = DS.Model.extend({ 
    pid: DS.attr('number'), 
    backendStart: DS.attr('string'), 
    transactionStart: DS.attr('string'), 
    queryStart: DS.attr('string'), 
    stateChange: DS.attr('string'), 
    waiting: DS.attr('boolean'), 
    state: DS.attr('string'), 
    query: DS.attr('string') 
}) 

用下面的路线:

App.HomeDbProcessesRoute = Ember.Route.extend({ 
    model: function() { 
     return App.DbProcess.find(); 
    } 
}) 

然后我有一个使用{{#each controller}}{{/each}}呈现检索到的所有进程的模板。但是,如果我导航到其他页面(无需重新加载页面)并返回进程页面,则会再次检索这些进程,并在页面上显示重复项。

编辑:我也尝试过这一点,但没有奏效:

DS.RESTAdapter.map('App.DbProcess', { 
    primaryKey: 'pid' 
}) 
+0

你的json是什么样的?它是否包含一个'id'属性? – albertjan 2013-02-13 09:43:08

+0

我假设你没有在你的JSON中为主键返回唯一的'ID',所以Ember将会保留在数组中。这是一个要求,或者你可以在模型上用'primaryKey:'指定一个不同的主键。 Ember通过'ID'确定唯一的记录。 – Wildhoney 2013-02-13 09:48:33

+0

编辑,它没有工作。 – TheOnly92 2013-02-13 09:49:49

回答

0

事实证明,你可以做这样的事情,以自定义主键全球

App.Adapter = DS.RESTAdapter.extend({ 
url: document.location.protocol+'//url-api.com', 
serializer: DS.RESTSerializer.extend({ 
    primaryKey: function(type) { 
     // If the type is `BlogPost`, this will return 
     // `blog_post_id`. 
     var typeString = (''+type).split(".")[1].underscore(); 
     return typeString + "_id"; 
    } 
}) 
}) 
2

我同样的问题现在和这里是我的小热修复:

{{#if id}} 
<div> 
    {{title}} 
</div> 
{{/if}} 

在模板中,我只从商店中渲染商品,如果它有设置的id(只有那些来自数据库)。但你已经解决它已经!

(使用修订版12)

+0

简单而有效:) – Abhiram 2014-03-07 09:18:26