创建不从模板字段中提取数据的新记录

时间:2014-07-07 19:19:53

标签: ember.js

我正在尝试创建一个新记录,但是没有任何来自字段的数据会自动传递,正如我所期望的那样Ember(从我读过的内容)。

我的模板:

<form {{action save content on="submit"}}>
{{input value=name}}
<button type="submit"}}>Next</a>

我读过content的内容是model的别名,并且互换这些内容没有任何区别。

我的路线:

App.CampaignsNewRoute = Ember.Route.extend({
  actions: {
    save: function(campaign) {
      console.log(campaign.name);
    }
  },

  model: function(controller) {
    return this.store.createRecord('campaign');
  }
});

我的控制员:

App.CampaignsNewController = Ember.ObjectController.extend({
  pageTitle: 'New Campaign Setup'
});

当我点击下一个&#39;它记录undefined。仅记录campaign会显示它是Ember模型,但没有name属性。 name模型上定义了campaign。将输入设置为{{input value=content.name}}会将name属性放回到返回的模型中,但它仍然是undefined。我在这个过程中遗漏了什么? EmberJS网站并没有从我能找到的地方展示如何做到这一点。

-

作为旁注:我最初使用的是App.CampaignsNewController = Ember.Controller.extend,因为我的模型返回了一个promises的哈希值,其中一个是数组,而Ember并不喜欢我使用arrayobject控制器。我将其简化为上述内容,以验证它不是造成问题的原因。所以考虑到这一点的任何解决方案都会很棒。

编辑:我可以通过this.get('controller').get('name')访问模板字段,但肯定没有必要吗?将我的控制器更改为Ember.Controller.extend也会阻止其工作,很想知道原因。澄清这里的最佳实践仍然很棒!

Edit2: this.get('controller.content').get('name')如果控制器只是Ember.Controller而不是Ember.ObjectController且模板有{{input value=content.name}},则有效。我会与之合作,但希望有人能澄清这是正确的方法。

1 个答案:

答案 0 :(得分:1)

ObjectController是去这里的方式。您可以使用一个特定模型,新模型支持它,并且您可以向控制器添加其他属性以在模板中使用。

代码

App.IndexRoute = Ember.Route.extend({
  actions: {
    save: function(campaign) {
      console.log(campaign.get('color'));
    }
  },

  model: function() {
    return Ember.RSVP.hash({
      record: this.store.createRecord('color'),
      all: this.store.find('color')
    });
  },
  setupController: function(controller, model){
    this._super(controller, model.record);
    controller.set('allColors', model.all);
  }
});

App.IndexController = Em.ObjectController.extend({

});

模板

在模板中,只要您想要访问支持模板的模型上的任何内容,您就可以访问它,就像模型是当前范围一样。

{{name}}

如果您想访问控制器上存在的任何属性,您将使用它在控制器上的属性名称。

{{allColors.length}}

以下是一个例子:

<form {{action save model on="submit"}}>
    Color:{{input value=color}}<br/>
   <button type="submit">Next</button>
</form>

<ul>
  {{#each item in allColors}}
    {{#unless item.isNew}}
      <li>{{item.color}}</li>
    {{/unless}}
  {{/each}}
</ul>

最后一个提示,总是使用getter和setter;)

Ember Data隐藏属性,它们不会直接存在于对象上,因此campaign.name将永远返回undefined。如果你做campaign.get('name'),你会得到真实的答复。

使用示例:http://emberjs.jsbin.com/OxIDiVU/792/edit