ember meta信息似乎由控制器共享

时间:2015-01-26 18:54:56

标签: ember.js ember-data

元信息。 index和limit在link-tos中用于分页。

元信息似乎在控制器之间共享。路由器就是这样

this.resource('persons', { path: 'persons/index/:index/limit/:limit' }, function() {
 this.resource('person', { path: 'person/:person_id' }, function() {  
    this.resource('personaddresess', { path: 'personaddresess/:person_id/index/:index/limit/:limit' });
  });

顶层导航具有索引为0且限制为50

的link-tos
 {{#link-to 'persons' 0 50 }}

#/persons/index/0/limit/50

的网址正确无误

地址的第二级导航使用索引0和限制9

  {{#link-to 'personaddresses' id 0 9}}

点击'在上述链接 - 限制人和人的地址被设置为9。

即。该网址现在为#/persons/index/0/limit/9/person/1/personaddresses/1/index/0/limit/9

两条路线都使用以下方法从REST

获取模型
   model: function(params) {
      var index = numeral().unformat(params.index);
      var limit = numeral().unformat(params.limit);
      return this.store.find(yaddayadda);

现在似乎元是在控制器之间共享的。每个控制器应该没有自己的元素(因为每个控制器都有自己的模型)?

App.PersonsController =  Ember.ObjectController.extend({
  meta: function() {
     return this.get('model.meta');
  }.property('model.meta'),
});

App.PersonAddressController =  Ember.ObjectController.extend({
  meta: function() {
     return this.get('model.meta');
  }.property('model.meta'),
});

meta会在每次查找之后通过extractMeta函数传递,该查找为商店中的每种类型设置元。

store.setMetadataFor(type, { limit: payload.limit });  // sets the metadata for "post"

但是,模型类型都不相同(一个是Person,另一个是PersonAddress);此外,商店参数使用。使用链接到的硬编码参数(0,50和0,9)?!

不确定是否相关但是在“人”的部分内容中。模板使用以下内容。 {{#link-to 'persons' meta.next meta.limit }}但是,无论是否单击后一个链接,都会发生上述行为。

有一个中间步骤,通过id加载个人。 (如上面的网址所示person/1

1 个答案:

答案 0 :(得分:0)

这与meta,model.meta,extract meta或store meta几乎没有关系。

参数必须唯一地命名,无论是id,index还是limit。

this.resource('persons', { path: 'persons/index/:personsindex/limit/:personslimit' }

this.resource('personaddresess', { path: 'personaddresess/:person_id/index/:paindex/limit/:palimit' });
  });

然后在路线......匹配那些参数。

 model: function(params) {
      var index = numeral().unformat(params.paindex); //using int but wtcmb
      var limit = numeral().unformat(params.palimit);
      return this.store.find(yaddayadda);

请注意,在网址中重复使用字段名称似乎很好,在这种情况下/index//limit/