为什么Ember模型没有更新?

时间:2016-07-11 15:07:59

标签: ember.js model

我的目标是简单地更新将数字附加到数组模型。由于我在模板中使用了迭代器,因此应该创建一个新的HTML元素。

我的动作确实被调用了,但模型并没有真正更新。

这是我的目录结构:

- app
  - routes
    - compare.js
  - templates
    - compare.hbs
    - application.hbs
  - app.js
  - index.html
  - router.js

compare.hbs:

<div id="container">
  <form method="post" name="login" {{action "submit" on="submit"}}>
      <p>
          Member ID
      </p>
    <p> {{input id="member-id" type="text"}} <input type="submit" value="Search"></p>
  </form>
  <div id="results">
      {{#each model as |result|}}
      <p>{{ result }}</p>
      {{/each}}
  </div>
</div>

router.js

import Ember from 'ember';
import config from './config/environment';

var Router = Ember.Router.extend({
  location: config.locationType
});

Router.map(function() {
    this.route('compare');
});

export default Router;

compare.js

import Ember from 'ember';

let results = [12, 34, 56];

export default Ember.Route.extend({
  model: function() {
    return results;
  },
  actions: {
    submit: function() {
      results.push(123);
      this.get('model').push(123);
      this.refresh();
    }
  }
});

有什么问题?

1 个答案:

答案 0 :(得分:2)

看起来你有一些问题。你不需要results.push,因为这只是在Embers知识之外的数组中添加值。添加到模型时使用pushObject,因为它应该通知ember更改。也无需在模型上调用刷新。

pushObject的文档显示了一个与您尝试的非常类似的示例:

http://emberjs.com/api/classes/Ember.NativeArray.html#method_pushObject

import Ember from 'ember';

let results = [12, 34, 56];

export default Ember.Route.extend({
  model: function() {
    return results;
  },
  actions: {
    submit: function() {
      this.model().pushObject(123);
    }
  }
});