0

私のルーターでは、これを行います:

connectOutlets: function(router) {
    router.get('applicationController').connectOutlet(
       'acquisitions', router.get('acquisitionsController').find());
}

このAcquisitionsControllerように見えます:

(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);

find()and関数は正常にremove()機能し、ビューが更新されます。

ただし、テンプレートからを呼び出すaddDuration{{action}}、関数が実行されてオブジェクトが保存されますが、ビューは更新されません。

アウトレットを設定したので、どういうわけかコントローラーのプロパティを観察していると思いました。アイテムを追加したり削除したりすると観察されているように見えますが、内部のアイテムが変更されたときは観察されていません。allcontent

どうすれば問題を解決できますか?

編集

ここに何をすべきかについての少しの説明がaddDurationあります。

私はember-resourcemodelを使用しているので、次のように、の代わりに、を使用resourceします。

var Acquisition = Ember.Resource.define({
  url: '/images/api/acquisition',
  schema: {
    id: String,
    date: Date,
    number: Number,
    duration: Number
  }
});

これにより、CRUD API、fetch()およびsave()のメソッドとのシームレスな統合が可能になりますember-resource

最初は、durationプロパティはですnull。私のテンプレートでは、次のようにします。

{{#if acquisition.duration}}
  <tr>
    <th>{% trans "Duration" %}</th>
    <td>{{view Ember.TextField valueBinding="acquisition.duration"}}</td>
  </tr>
{{/if}}

duration次に、次のように、プロパティを追加するためのボタンがあります。

{{#unless acquisition.duration}}
  <li><a href="#" {{action addDuration acquisition}}>{% trans "Add duration" %}</a></li>
{{/unless}}

をチェックしているので、そこnull{{#if acquisition.duration}}ブロックでは、最初はduration TextField表示されません。だから私はユーザーにボタンをクリックしてもらいたいのですがAdd duration、それはを作成する効果がありTextFieldます。

1理想的には、フィールドは空ですが、今のところ、より簡単だと思ったという理由だけで、初期値の、で満足しています。したがって、私のでは、プロパティがに設定されるように現在のオブジェクトactionを更新しようとしています。acquisitionduration1

4

1 に答える 1

1

私はあなたのaddDuration機能に少し混乱しています。obj.set('duration', 1);しかし、obj.duration=1の代わりに呼び出す必要があるようです。

于 2012-09-22T02:16:28.840 に答える