0

次の Ember.View を定義しました。

App.ControlGroup = Ember.View.extend
  classNames: ['control-group']
  layoutName: 'controlGroup'

レイアウト テンプレート (controlGroup.handlebars) は次のようになります。

<label class="control-label">{{ view.label }}</label>
<div class="controls">
  {{ yield }}
</div>

上記で定義したビューを使用する例を次に示します。

  {{#view App.ControlGroup label="Property code"}}
    {{#if isNew}}
      {{view Em.TextField valueBinding="code"}}
    {{else}}
      <p>{{code}}</p>
    {{/if}}
  {{/view}}

これにより、次の html が生成されます。

<div id="ember10170" class="ember-view control-group">
  <label class="control-label">Property code</label>
  <div class="controls">   
    <input id="ember10172" class="ember-view ember-text-field" type="text">
  </div>
</div>

これはまさに私が欲しいものです。ただし、テンプレートでビューの属性を使用すること ({{ view.label }}上記の controlGroup.handlebars }} を参照) はアンチパターンであり、プロパティのルックアップはビューのコントローラーから取得する必要があることを学びました。だから、それについてどうやって行くのだろうか。この場合、プロパティはビュー (html スニペット) 自体に関連しているため、私の実装は正当に思えますが、他のアプローチを見てみたいと思っています。

4

1 に答える 1

1

ビュー プロパティを使用すること自体が悪いことだとは思いません。Ember のこの機能を使いすぎる傾向があるだけです。モデル、コントローラー、ビューには異なる寿命があるため、「何がどこに行くのか」という問題は次のように分解できます。

  • モデル:永続化可能なデータで、ページの更新後も存続します。
  • コントローラー:永続化できないデータ。ページの更新後は存続しませんが、再レンダリングの表示には無関心です。
  • ビュー:時々破棄されます。{{#if}}ヘルパーの内部。

これら 3 つのコンポーネントの動作は、特定のプロパティを配置する場所を暗示していると思います。
(また、あなたの例は完全に整理されていると思います。それについて間違っている場合は、その理由を聞きたいです):)

編集:labelプロパティの場合、たとえば、valueプロパティが のようなコアクラスに実装される方法はほとんどEmber.TextFieldです。{{view}}ヘルパーを使用するときに値を与えることもできます: {{view Ember.TextField value="foo"}})。また、バインディングを宣言してコントローラーに転送することもできます: {{view Ember.TextField valueBinding="foo"}}。後者はfoo、コントローラーで名前が付けられたプロパティを使用します。

于 2013-03-28T09:54:34.653 に答える