【问题标题】:Ember issue with setting attribute value设置属性值的 Ember 问题
【发布时间】:2016-01-13 08:26:15
【问题描述】:

我有一个 Ember Route 类定义如下;

export default Ember.Route.extend({
    model: function() {
        var compObj = {};
        compObj.gridPara = this.get('gridPara');
        return compObj;
    },
    gridPara: function() {
        var self = this;
        var returnObj = {};
        returnObj.url = '/myService';
        // setting some other returnObj attributes
        var summaryObj = {
            total: {
                label: "Total 1",
                value: "100"
            },
            additional: [{
                label: 'Label 2',
                value: 'val2'
            }, {
                label: 'Label 3',
                value: 'val3'
            }]
        };
        returnObj.summary = summaryObj;
        return returnObj;
    },
    actions: {
        dataLoaded: function(resp) {
            // Here I get the service response and want to set (or overwrite) the summaryObj values
            this.get('gridParams').summary.total.value = resp.numRows;          
        }
    }
});

我的模板看起来像

{{my-grid params=this.gridPara dataLoaded="dataLoaded"}}

现在我想在 returnObj 上设置“摘要” 我已经验证我在 dataLoaded 回调中得到了“resp”。

但我在尝试这样做时收到以下错误

this.get('gridParams').summary.total.value = resp.numRows;      

未捕获的错误:断言失败:您必须使用 Ember.set() 将([object Object] 的)value 属性设置为 100

另外,我如何在 summaryObj 中设置/推送“附加”数组

【问题讨论】:

    标签: javascript jquery ember.js


    【解决方案1】:

    由于错误状态,您必须将set 用于该值(我假设您在某处定义了gridParams?):

    this.set('gridParams.summary.total.value', resp.numRows);
    

    为了推送一个新对象,试试这个:

    var additional = this.get('gridParams.additional');
    additional.push({label: ..., value: ....});
    this.set('gridParams.additional', additional);
    

    【讨论】:

    • Thx ..还有一个问题...我如何更新这个“附加”数组中的任何现有值...假设我想更新第一个项目(或者如果可能的话带有特定标签值)“值”到“NEW_VAL”?所以我不想继续推送,而是更新现有的数组项
    【解决方案2】:

    不是 100% 确定,但请尝试一下:

    • 注意属性名称。我认为声明“gridPara”并尝试获取“gridParams”是一个措辞错误
    • 您应该像这样检索值
      this.get('gridParams.summary.total.value')
    • 您在最后一句中尝试的是一个设置,但就像是普通的 JS。在 Ember 中,您应该这样做 this.set('gridParams.summary.total.value',resp.numRows)

    【讨论】:

      【解决方案3】:

      只需添加到@Remi 答案,最佳做法是使用

      Ember.set('gridParams.summary.total.value', resp.numRows);
      

      回答评论中的问题 假设你想更新索引i处的additional数组。就这样做

      var updateItem = additional[i];
      Ember.set(updateItem.propertyname,newValue)
      //Here propertyname would be the property you want to update and new Value is the new value which you want to set to that property
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-20
        相关资源
        最近更新 更多