首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在车把模板中绕过/禁用大写->全局推理?

在车把模板中绕过/禁用大写->全局推理?
EN

Stack Overflow用户
提问于 2013-02-05 07:28:30
回答 1查看 641关注 0票数 1

我有以下车把模板(片段):

代码语言:javascript
复制
{{#each cbe in abs.XyzBookingEntries}}
    <tr>
        {{#if cbe.isLoaded}}
            <td>{{cbe.XYZdata.ApptDuration}} min:</td> 
            <td>
                {{cbe.XYZdata.ApptType}}
                {{#if cbe.XYZdata.ApptTypeDetailCode}}
                    ({{cbe.XYZdata.ApptTypeDetailCode}})
                {{/if}}
            </td>
            <td {{bindAttr class="cbe.XYZdata.statusClass"}}><strong>{{cbe.XYZdata.ApptStatus}}</strong></td>
        {{else}}
            <td>
                Loading...
            </td>
        {{/if}}
    </tr>
{{/each}}

从中你可以观察到两件事:

  1. 我在我的模型中使用了大写属性。
  2. 这些属性中的大写不一致(XyzBookingEntries与XYZdata)

如果我不使用遗留数据源,我很乐意修复这两个问题。但是,我有多个底层数据源,具有不同的开发人员和不同的约定(或者缺少这些数据源)。模型通过大多数自动化的ORM和序列化从我的数据库到客户端。而且,由于约定不一致,自动名称映射(比如使用keyForAttributeName)将很困难,特别是双向映射(XYZdata -> xyzdata -> Xyzdata?)。但是,如果这只是一个糟糕的惯例问题,我可以用文档来解决。

更大的问题是,我的车把模板有这些名字--我想是因为它想把它们解释成全局属性,而不是成员属性。当下面的模板呈现时,我会收到以下警告消息:

代码语言:javascript
复制
WARNING: Watching an undefined global, Ember expects watched globals to be setup 
by the time the run loop is flushed, check for typos

虽然我确实得到了所有的数据呈现与预期!当它从DOM中删除时,我会得到这样的错误:

代码语言:javascript
复制
node is undefined
    node.unchain(key, path);

当出现警告和错误时,如果我查看调用堆栈中的变量,就可以找到我在模板中呈现的键(例如,在pendingQueue中)。

如果我定义了以下属性,那么把手条认为它们是全局的理论是支持的:

代码语言:javascript
复制
xyzData: function(){
    return this.get('XYZdata');
}.property('XYZdata')

并将我的所有链改为引用cbe.xyzData.*,警告和错误都消失了!

所以,我的问题是:

是否有一种方法可以配置/说服Ember/Handlebars按原样处理属性名,即忽略caps ->全局约定?如果可能的话,我想避免手工映射大量的属性。也可以考虑其他可能性/建议。

我应该提一下,我的成绩是1.0.0-预科4,最近的一位大师也看到了同样的行为。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-05 13:40:58

是否有一种方法可以配置/说服Ember/Handlebars按原样处理属性名,即忽略caps ->全局约定?

这些约定非常深入地融入到框架中,当然没有开/关。

如果可能的话,我想避免手工映射大量的属性。也可以考虑其他可能性/建议。

这正是序列化程序的目的。当然,手动映射这些属性听起来是一个很大的提升,但是除非您是数据源,否则这是一次性的事情,并且不会比定义成员对象所花费的精力更多。另一个好处是,您可以将此映射封装在一个地方,从而释放馀下的modesl/控制器/视图/模板来使用一致的命名约定。我会认真地建议投资于这种方法。例如:

代码语言:javascript
复制
serializer.map(Cbe, {
  xyzdata: { key: 'XYZdata' }
});

随着这些到位,成员将负责所有属性的双向映射。请查看json串行化测试,以获得更多如何完成此操作的示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14702224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档