3

ember.js/emblem.js でログインフォームを書こうとしています。次のようにプレースホルダーを I18ning しようとしない限り、すべてが機能します。

Em.TextField valueBinding="view.username" placeholder="#{t 'users.attributes.username}"
Em.TextField valueBinding="view.password" placeholder="#{t 'users.attributes.password'}" type="password"

試してみると、同じ応答が得られます。

= input value=view.username placeholder="#{t 'users.attributes.username}"
= input value=view.password placeholder="#{t 'users.attributes.password'}" type="password"

どちらの場合も、次のエラー メッセージが表示されます。

Pre compilation failed for: form
. . . .
Compiler said: Error: Emblem syntax error, line 2: Expected BeginStatement or DEDENT but "\uEFEF" found.   Em.TextField valueBinding="view.username" placeholder="#{t 'users.attributes.username}"

既にコンパイルされているステートメント内から何かをコンパイルしようとしているために、これが起こっていると思います。これを証明するために、コードを次のように変更すると、ランタイム エラーは発生しません。

input value=view.username placeholder="#{t 'users.attributes.username}"
input value=view.password placeholder="#{t 'users.attributes.password'}" type="password"

しかし、欠点は、値バインディングが機能しなくなり、フォームが操作不能のままになることです。私が考慮していないこの問題に取り組む別の方法はありますか?

4

4 に答える 4

3

アレクサンダーが指摘したように、これは Ember とハンドルバーの制限です。私が使用してきた回避策placeholderは、変換された文字列を返すコントローラー プロパティを参照することです。例えば:

{{input
    type="text"
    value=controller.filterText
    placeholder=controller.filterPlaceholder }}

そして、コントローラーで:

filterPlaceholder: function () {
    return i18n.t('players.filter');
}.property('model.name'),
于 2014-03-03T11:10:02.100 に答える
0

ビューを使用して書式を設定し、テンプレートにドロップする必要があります。コントローラーは、テンプレートで何が起こるかを知るためのものではありません。

また、それをプロパティにしたいので、i18n は 1 回だけ動作し、キャッシュ バージョンを使用できます。

テンプレート:

{{input value=view.username placeholder=view.usernamePlaceholder}}
{{input value=view.password placeholder=view.passwordPlaceholder type="password"}}

意見:

export default Ember.View.extend({

  usernamePlaceholder: function() { 
    return Ember.I18n.t('users.attributes.username');
  }.property(),

  passwordPlaceholder: function() { 
    return Ember.I18n.t('users.attributes.password');
  }.property()

});
于 2015-05-02T06:58:14.717 に答える