10

ノックアウト 3.2.0 で新しいコンポーネント システムを使用しようとしています。

現時点では多くのドキュメントはありませんが、これは機能します。

ko.components.register('price-input', {
  template: '<span>price-input</span>'
})

ただし、templateバインディングを使用すると、次のように DOM に既に存在するテンプレート名を指定できます。

<script type="text/html" id="price_input">
  <span>price-input</span>
</script>

次に、これを行うことができます:

<div data-bind="template: {name: 'price_input'}"></div>

だから私はこれを試しました:

ko.components.register('price-input', {
  template: {name: 'price_input'}
})

しかし、うまくいきません。新しいコンポーネントで名前付きテンプレートを使用する方法はありますか、それともインラインであるか、AMD でロードする必要がありますか?

ありがとう

編集:RP Niemeyerの回答の後、明確にするために、私が彼の回答を試したテンプレートを次に示します。

<script type="text/html" id="ifx_price_input">
  <h4>PRICE INPUT <span data-bind="text: value"></span></h4>
</script>

コンポーネントコードは次のとおりです。

ko.components.register('price-input', {
  template: {element: 'ifx_price_input'}
})

テンプレートはロードされますが、エスケープされた文字列として扱われます。

アイデア?

4

3 に答える 3

8

element次のような要素自体または要素の文字列であるプロパティを渡すことができますid

template: { element: 'myTmpl' }
于 2014-07-11T19:57:59.150 に答える
1

最後に、いくつかのハッカーでこれを解決しました...これがノックアウト開発者によってよりよく答えられることを願っています.

これは機能します。基本的には、テンプレート テキストを手動で読み込んでregister関数に渡すだけです。そのため、インラインであるかのように機能します。

ko.components.register('price-input', {
  template: $('#ifx_price_input').html()
})
于 2014-07-11T22:08:43.677 に答える