Handlebars调试缺少模型的{{property}}

时间:2014-10-16 12:19:28

标签: ember.js handlebars.js

如果模板没有获得所有{{properties}}(用于调试),我想在console中看到某种输出

e.g。如果是模板

<script type="text/x-handlebars" id="demo">
    <h1>{{name}}</h1>
    <p>{{desc}}</p>
</script>
使用模型

调用

{
  name:"Max",
}

应该有像console.warn

这样的输出
Template "demo" could not find property "desc"

是否有任何助手,回调......每次调用{{property}}等句柄表达式时都会调用它?

2 个答案:

答案 0 :(得分:1)

你可以用javascript做任何你喜欢的事。但要小心。 :)

有很多方法可以实现您的目标,具体取决于您真正需要的是什么,以及您可以花多少时间用于黑客余烬/把手/余烬数据包。

第一个也是最简单的变体是覆盖SimpleHandlebarsView / _HandlebarsBoundView的render方法,它显示简单的绑定值(其他几个视图很少:@eachwith等)。这是一个简单的序列:覆盖方法,调用旧方法,检查获取渲染值的结果,console.warn if result === undefined。您无法在该方法中获取模板名称,但您可以获取渲染值的父视图。因此,我建议打开LOG_VIEW_LOOKUPS以轻松地将视图与模板匹配。

控制台日志示例:

Rendering application with default view <(subclass of Ember.View):ember226> Object {fullName: "view:application"} 
Rendering index with default view <(subclass of Ember.View):ember251> Object {fullName: "view:index"}
Rendering <(subclass of Ember.View):ember251> , property is undefined: model.undefined

JSBin with example

另一种方法是从ember-handlebars-ext包中覆盖handlebarsGet方法:https://github.com/emberjs/ember.js/blob/v1.7.0/packages/ember-handlebars/lib/ext.js#L75

第三,如果您需要捕获对Ember.Objects的未定义属性的访问权限,则可以覆盖这些对象的unknownProperty方法。

如果您需要快速检查渲染数据,可以在Handlebar模板中使用{{log model}}方法。

当然,你可以更深入地修补和重写Ember的核心。但我建议不要太依赖图书馆的内部结构。祝你好运!

答案 1 :(得分:0)

不,他们使用Ember.get(context, propertyName)没有返回元数据,说明属性是未定义的。