从Ember组件转换把手中的标签属性

时间:2015-07-02 20:43:53

标签: ember.js

我正试图通过我的国际化/本地化实施来解决由1.13升级引起的问题。十分之九,将出现默认标签属性,但有时,我们需要根据用户的语言设置提供备用标签。

现在,把手模板具有以下内容:

{{button-widget label="sample" action="actionHandler"}}

Pre 1.13,我们将在组件中添加一个函数,在init上调用,它将查找当前的langauge设置,并将“this.label”设置为我们的语言环境文件中的结果。

i18n: function() {
    ...
}.on('init')

{...}查找关键字“test”的相应区域设置文件,并使用结果更新label属性(如果找到)。例如,如果用户是法语,则查找“test”可能会返回“échantillon”。

从一些研究开始,从1.13开始,Ember不再允许更新init上的属性。但是,他们确实创建了一些新的钩子来帮助(包括didInitAttrs和didReceiveAttrs)。不幸的是,它们似乎都不允许我覆盖label属性。

我试图在不依赖丑陋的jQuery hack的情况下做到这一点,并且因为这是其他应用程序正在使用的项目,按钮标签可能并不总是在按钮内可用,所以只需将标签添加到模型并引用变量可能不是一个可靠的解决方案。

非常感谢任何帮助。

杰森

1 个答案:

答案 0 :(得分:0)

正如Kitler所提到的那样,你可以使用didInsertElement。

App.GenericComponent = Ember.Component.extend({
    didInsertElement: function() {
        // Your magic here
    }
}

此外,如果您需要访问商店,可以通过定义包含服务的属性将其用作服务:

App.GenericComponent = Ember.Component.extend({
    store: Ember.inject.service(),
    didInsertElement: function() {
        // Your magic here

        // Like so
        this.get("store").find("model");
    }
}

如果您的语言设置不在数据存储中,您只需将包含该信息的对象附加到您已经习惯的组件即可。