3

モデルで ArrayProxy を使用している場合、その配列内の特定の要素のプロパティを更新する方法が見つかりません。

サンプルのルートとコントローラーは次のとおりです。

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return Ember.ArrayProxy.create({
        content : [
            { firstName : "Bob", lastName : "Smith" }, 
            { firstName : "George", lastName : "Jhnsn"}
        ]
    });
  }
});


App.IndexController = Ember.Controller.extend({
    actions : {
        fixGeorgesLastName : function(){
            // how to I change the last name to 'Johnson' ???
            console.log(this.get("model").objectAt(1).lastName); // Jhnsn
            var georgeObjFromModel = this.get("model").objectAt(1);
            console.log(georgeObjFromModel.lastName); // Jhnsn

            // georgeObjFromModel.objectAt(1).lastName = "Johnson";  // error !!!  TypeError: Object #<Object> has no method 'objectAt'

        }
    }
});

lastName2 番目の要素の値を変更するにはどうすればよいですか?

同じ配列のローカル バージョンでそれを行う方法を理解できます。

// local instance of same array
var localCustomerArray = Ember.ArrayProxy.create({
    content : [
        { firstName : "Bob", lastName : "Smith" }, 
        { firstName : "George", lastName : "Jhnsn"}
    ]
});

// works fine
console.log("before: " + localCustomerArray.objectAt(1).lastName);  // Jhnsn
localCustomerArray.objectAt(1).lastName = "Johnson";
console.log("after: " + localCustomerArray.objectAt(1).lastName);  // Johnson

私が間違っていることは何か分かりますか?

4

2 に答える 2

9

This questionで答えが見つかりました

Ember.set次のメソッドを使用して更新できます。

var georgeObjFromModel = this.get("model").objectAt(1);
Ember.set(georgeObjFromModel, "lastName", "Johnson");
于 2013-11-01T20:48:30.443 に答える
2

次のこともできます。

this.get("model").set(1+'.lastName', 'Johnson');

なぜ私たちは次のことをすることができないのですか?

this.get("model").get(1).set('lastName', 'Johnson');
于 2014-03-04T04:39:09.527 に答える