【问题标题】:Ember model.get() not returning values or binding to template properlyEmber model.get() 未正确返回值或绑定到模板
【发布时间】:2016-07-07 13:19:20
【问题描述】:

我有一个路由,它通过 RSVP 哈希中的 .store.query() 方法填充模型属性:

model(params, transition) { 
    return Ember.RSVP.hash({
        myData: this.store.query('table-datum', parameters)
    });
}

这会返回一个承诺,并且根据 Ember 检查器似乎将数据放入我的存储中,我看到了正确的行数,并且它们都具有填充了数据的属性。

然后,我的主视图模板中有一个简单的组件模板,带有一个 each 块来显示输出:

    {{#each data as |result|}}
        <tr>
            <td>{{result.prop1}}</td>
            <td>{{result.prop2}}</td>
        </tr>
    {{/each}}

我像这样将属性传递给我的组件:

        <div id="tableContainer">
            {{result-table data=model.myData}}  
        </div>

但由于某种原因,模板绑定了正确的行数,但没有正确访问类的 prop1prop2 位(所以我只得到 20 个左右的空白表行)

如果我尝试在模板中仅输出 {{result}},它看起来像这样:

<client@model:table-datum::ember574:1>

我很确定数据就在某个地方,只是我的模板似乎由于某种原因没有访问属性。

关于在哪里寻找这个有什么想法吗?

编辑:记录result 对象看起来几乎正确,但不完全正确:

扩展内部模型会显示一些数据,但也会显示“空对象”,这对我来说似乎有点不对劲!

编辑:如果有帮助,我有一个控制器功能,它获取 model.myData 并对其进行操作,这给了我期望的结果:

getMax() {
    let max = _.max(this.get('model.myData'),'aField').aField;
    console.log(max); // logs 41 as I expect
    return max;
}

【问题讨论】:

  • 如果您记录结果,您会在控制台中得到什么? {{ log result }}
  • 我得到了一个内部带有值的 Ember 类,但它也奇怪地在一些地方说“空对象”,将用图像更新问题
  • myData: this.store.query('table-datum', parameters) 无效,那是您的真实代码吗?非常不鼓励在属性/计算属性中返回承诺,您是否有机会将查询移至路由?
  • 这是我的真实代码,其中参数是我想传递到终点的查询字符串参数的对象。它生成一个返回有效 JSON 的有效 HTTP 请求。我是 99.99% 这不是问题。
  • 您的代码看起来不错...我能看到的唯一原因是您可能没有正确访问属性。如何使用 result.LUFresult.luf 访问组件中的属性?

标签: templates ember.js


【解决方案1】:

这是您在路线模型中所做的吗?

model() {
    return Ember.RSVP.hash({
        myData: this.store.query('table-datum', parameters)
    }).then(function(results) { 
        return results; 
    }).catch(function(error) { 
        throw error;
    });
},
setupController(controller, model) {
    this._super(...arguments);
    Ember.set(controller, 'myData', model.myData);
}

然后在模板中我将访问 myData。

【讨论】:

  • 您示例中的 thencatch 案例是多余的
  • 他不是必须在模板中访问model.myData吗?
  • @Vis 我正在做你在没有 .then/catch 的情况下编写的内容,因为正如@DanMcClain 所说,我理解它们是多余的。此外,我没有为 model.myData 显式设置控制器属性,因为我的所有其他哈希属性都可以正常工作并且可以访问(我使用 findAll() 与这些属性)
  • @torazaburo 我将model.myData 作为一个名为data 的属性传递给子组件。这适用于我在其他几个(甚至这个)组件中的模型上的所有其他哈希属性。
  • myData 将是模型。
猜你喜欢
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 2015-09-02
相关资源
最近更新 更多