【问题标题】:Ember.js Handlebars BoundHelper Uncaught TypeError: Object #<Object> has no method 'split'Ember.js Handlebars BoundHelper Uncaught TypeError: Object #<Object> has no method 'split'
【发布时间】:2014-03-21 22:31:48
【问题描述】:

我正在制作一个把手助手来简化 Ember 应用程序的翻译。它需要能够绑定到一个计数选项,因为计数会随着时间而变化,并且翻译需要根据计数是复数还是单数。

例如:

{{i18n translation.key countBinding='numberCount'}}

会去语言文件看看

translation: {
  key: {
    'one': 'widget',
    'other': 'widgets'
  }
}

并且会根据numberCount的值返回'widget'或'widgets'

这是帮助程序的代码:

Ember.Handlebars.registerBoundHelper('i18n', function(property, options) {
  var params = options.hash,
    self = this;

  // Support variable interpolation for the options
  Object.keys(params).forEach(function(key) {
    params[key] = Em.Handlebars.get(self, params[key], options);
  });

  // Coerce number-like strings into numbers
  if (params.count && !isNaN(params.count) && typeof(params.count) == "string") {
    params.count = Number(params.count);
  }

  // I18n is the library that powers the translation
  return I18n.t(property, params);
});

如果我使用Ember.Handlebars.registerHelper 而不是registerBoundHelper,它可以正常工作,只是不会绑定到选项。但是当我尝试使它成为绑定助手时(如上面的代码),应用程序将无法加载,并且控制台给我错误“Uncaught TypeError: Object # has no method 'split'”

这里是 Ember.Handlebars.registerBoundHelper 的文档:http://emberjs.com/api/classes/Ember.Handlebars.html#method_registerBoundHelper

【问题讨论】:

    标签: javascript ember.js internationalization handlebars.js


    【解决方案1】:

    如果我们替换它会起作用

    var params = options.hash
    

    var params = options.hash.boundOptions
    

    {{i18n translation.key countBinding='numberCount'}}
    

    {{i18n translation.key count=numberCount}}
    

    ? 它适用于我的测试环境。

    【讨论】:

    • 不,当我使用 registerHelper 时,我得到“Uncaught TypeError: Object.keys called on non-object”,当我使用时,我得到同样的“Uncaught TypeError: Cannot call method 'split' of undefined” registerBoundHelper
    • 嗯。第二个替换 (contenBinding->content) 将在新的车把和 ember 版本中工作。仅尝试第一次替换或检查 numberCount 的值(它不应为 undefined/null)。
    • 据我所知,问题在于 Bound Helper 自动将参数 (translation.key) 视为变量,而我给了它一个字符串。普通助手没有这样做。
    猜你喜欢
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    相关资源
    最近更新 更多