ember js表单提交查看

时间:2013-03-03 01:18:53

标签: javascript ember.js ember-data single-page-application

使用emberjs(1.0.0rc1)和ember-data(最近的版本#36d3f1b),我试图设置一个基本的crud示例。我无法弄清楚如何从视图中检索提交的模型,然后更新/保存它。这是我的代码:

App = Ember.Application.create();

App.Router.map(function() {
  this.resource('posts', function() {
    this.route('create');
    this.route('edit', {
      path: '/:post_id'
    });
  });
});

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

App.PostsCreateView = Ember.View.extend({
  submit: function () {
    console.log(this.get('model')); // undefined
  }
});

App.Post = DS.Model.extend({
  title: DS.attr('string'),
  body: DS.attr('string')
});

App.Post.FIXTURES = [{
  id: 2,
  title: 'a',
  body: 'aa'
}, {
  id: 5,
  title: 'b',
  body: 'bb'
}];

App.Store = DS.Store.extend({
  revision: 11,
  adapter: DS.FixtureAdapter.create({
    simulateRemoteResponse: false
  })
});

和创建模板:

<script type="text/x-handlebars" data-template-name="posts/create">
  {{#view App.PostsCreateView tagName="form" classNames="form-horizontal"}}
  <h3>Create</h3>

  <div class="control-group">
    <label class="control-label" for="title">Title</label>
    <div class="controls">
      <input type="text" id="title" placeholder="Title" />
      {{view Ember.TextField valueBinding="title"}}
    </div>
  </div>
  <div class="control-group">
    <label class="control-label" for="body">Body</label>
    <div class="controls">
      <input type="password" id="body" placeholder="Body" />
    </div>
  </div>
  <div class="control-group">
    <div class="controls">
      <button class="btn">Create</button>
    </div>
  </div>

  <div>{{#linkTo 'posts'}}Back{{/linkTo}}</div>
  {{/view}}
</script>

如何从提交钩子访问表单的值(序列化到模型)?其次,我如何通过FixtureAdapter持久保存?

2 个答案:

答案 0 :(得分:2)

你的问题的第一部分很难回答,因为它实际上非常简单,但为了简单起见,你需要改变你对模型CRUD的看法。您不需要“提交”功能。当您实例化视图时,它应该有一个绑定到它的模型实例。 (如果您正在创建一个新实例,它将是一个新的空实例。)当您在视图中对该模型进行更改时,它们会立即生成;无需提交。 (毕竟,你会提交什么?)

我不确定这实际上是回答了你的问题,但也许它会让你回答它。

我可以更加明确你的第二个问题,通过FixturesAdapter保持价值:你不能。 FixturesAdapter就是一个用于将夹具(基本上是只读数据)加载到商店的适配器。 FixturesAdapter对模型所做的更改只会持续到重新加载应用程序。要保留数据,您需要从FixturesAdapter转换到另一个适配器(可能是RestAdapter)。

答案 1 :(得分:0)

this article涉及构建一个包含创建表单的小型示例应用程序(它最初是葡萄牙语,但幸运的是,在这种情况下,谷歌翻译不会使文本过多。) 可以找到代码here(重要部分在页面下方)和实例here