Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 如何修改Emberjs控制器中的对象,以便更新视图?_Ember.js - Fatal编程技术网

Ember.js 如何修改Emberjs控制器中的对象,以便更新视图?

Ember.js 如何修改Emberjs控制器中的对象,以便更新视图?,ember.js,Ember.js,在我的路由器中,我执行以下操作: connectOutlets: function(router) { router.get('applicationController').connectOutlet( 'acquisitions', router.get('acquisitionsController').find()); } AcquisitionController如下所示: (function(app) { 'use strict' var Acqui

在我的路由器中,我执行以下操作:

connectOutlets: function(router) {
    router.get('applicationController').connectOutlet(
       'acquisitions', router.get('acquisitionsController').find());
}
AcquisitionController
如下所示:

(function(app) {
  'use strict'

  var AcquisitionsController = Ember.Controller.extend({
    all: [],

    find: function() {
      var self = this,
          pk = $('#object-pk').attr('data-value');

      var imageResource = App.Image.create({id: pk});
      imageResource.fetch().done(function(data) {
        _.each(data.acquisition_pks, function(value, index) {
          var acquisitionResource = App.Acquisition.create({id: value});
          acquisitionResource.fetch().done(function(data) {
            self.all.addObject(data);
          });
        });
      });

      return self.all;
    },

    remove: function(acquisition) {
      var self = this;
      var acquisitionResource = App.Acquisition.create(acquisition);
      acquisitionResource.destroy().done(function() {
        self.all.removeObject(acquisition);
      });
    },

    addDuration: function(acquisition) {
      var self = this;
      if(acquisition.duration === null) {
        acquisition.duration = 1;
        var acquisitionResource = App.Acquisition.create(acquisition);
        var obj = self.all.findProperty('id', acquisitionResource.data.id);
        if (obj !== undefined)
          obj.duration = 1;
        acquisitionResource.save();
      }
    }
  });

  app.AcquisitionsController = AcquisitionsController;
  app.acquisitionsController = AcquisitionsController.create();
})(window.App);
{{#unless acquisition.duration}}
  <li><a href="#" {{action addDuration acquisition}}>{% trans "Add duration" %}</a></li>
{{/unless}}
find()
remove()
函数工作正常,我的视图得到更新

但是,当我从模板中以
{{action}}
的形式调用
addDuration
时,尽管函数执行并保存了对象,但视图不会更新

我认为该视图在某种程度上观察到了我控制器的
all
属性,因为我设置的是我的插座的
内容
,它看起来像是在我添加和删除项目时被观察到的,而不是当其中的项目更改时

我怎样才能解决这个问题

编辑 这里有一些关于
addDuration
应该做什么的解释

我正在使用,所以我没有使用
模型
,而是使用
资源
,如下所示:

var Acquisition = Ember.Resource.define({
  url: '/images/api/acquisition',
  schema: {
    id: String,
    date: Date,
    number: Number,
    duration: Number
  }
});
这允许与my CRUD API无缝集成,包括
fetch()
save()
余烬资源的
方法

最初,
duration
属性为
null
,在我的模板中,我执行以下操作:

{{#if acquisition.duration}}
  <tr>
    <th>{% trans "Duration" %}</th>
    <td>{{view Ember.TextField valueBinding="acquisition.duration"}}</td>
  </tr>
{{/if}}
因为我正在检查
null
,在上面的
{{{if acquisition.duration}}
块中,最初,
duration
文本字段不会显示。因此,我希望用户单击
addduration
按钮,这将产生创建
TextField
的效果


理想情况下,该字段应该是空的,但现在我满足于初始值
1
,因为我认为这会更容易。因此,在我的
操作
中,我试图更新当前的
采集
对象,以便将
持续时间
属性设置为
1
我对您的
添加持续时间
函数有点困惑。但是看起来您需要调用
obj.set('duration',1)
而不是obj.duration=1。

我添加了一个大编辑,其中解释了
addDuration
函数并显示更多代码。不幸的是,您的建议不起作用,因为
obj
没有
set
方法。它对我不起作用的原因是我没有使用模型,而只是使用资源。我已经编写了一个模型并将其连接到资源,现在
set
方法起作用了。