如何在使用call()时停止Ember Render抱怨已弃用的无引号参数?

时间:2014-03-25 05:57:28

标签: javascript ember.js handlebars.js view-helpers

我正在关注一个模板,用于动态选择要使用渲染助手渲染的模型,路径,控制器,如outlined in this question(以及其他地方)。我的问题是我们希望在设置Ember.ENV.RAISE_ON_DEPRECATION标志的情况下运行,以便在问题发展成升级噩梦之前捕获它们。我从一个把手助手那里打电话给Ember.Render,就像这样:

Ember.Handlebars.registerBoundHelper('renderModuleEdit', function(callingContext, module, options) {
  var modelName = callingContext.get('type').get('modelName');
  return Ember.Handlebars.helpers.render.call(callingContext, "edit_" + modelName, modelName, options);
});

模板中包含以下代码:

{{#each module in modules}}
  <div class="tab-content" {{bind-attr class="module.active:active"}}>
    {{renderModuleEdit module module}}
  </div>
{{/each}}

问题是渲染在“无报价参数”的测试中失败,即使我在其上使用call(),而不是直接把手模板语法。测试在this line的源中定义。实际测试是options.types[0] !== 'ID',虽然options参数在寄存器辅助函数(上面的第一个代码块)中可用,因此我可以将1 st 类型从'ID',我不确定我能将它改为,这不会导致其他东西在以后巧妙地破坏。错误消息来自:

  

未捕获错误:不推荐使用带{{render}}的无引号参数。请更新为引用的“{{render”edit_Intro“}}。

由于我没有使用{{render edit_Intro}}拨打此电话,因此我不知道如何纠正此问题。如果我将模板代码更改为{{renderModuleEdit 'module' 'module'}},那么我的renderModuleEdit的参数将作为'module'的字符串而不是我需要的模型实例。

我觉得我不知道这个测试实际上是什么,以及'无引号'和'引用'参数甚至意味着什么。有人可以解释一下吗?有没有办法围绕这个弃用警告从这样的注册绑定把手助手调用渲染?

1 个答案:

答案 0 :(得分:1)

一个肮脏的解决方案,但现在正在工作:

Ember.Handlebars.registerBoundHelper('renderModuleEdit', function(callingContext, module, options) {
  options.types[0] = "STRING";  // FIXME: hack

  var modelName = callingContext.get('type').get('modelName');
  return Ember.Handlebars.helpers.render.call(callingContext, "edit_" + modelName,     modelName, options);
});

我也无法找到合适的修补程序: - /