はData-linked <select> elementsを見てみましょう。
あなたのコード:
<select id="cboHarbor" data-link="{{getName:activeHarbor}}">
が正しくありません。 activeHarborにデータリンクする必要があります。 activeHarborが文字列だった場合は、データリンク使用できます
<select id="cboHarbor" data-link="activeHarbor">
が、それはあなたが各オプションに使用できることを、あなたは各港のオブジェクトの文字列値を持つプロパティのいくつかの種類を持っている必要がオブジェクトであるため、値。次に、コンバーターを使用して、データリンクバインディング動作のactiveHarborオブジェクトとその文字列値プロパティの間で前後に変換します。
たとえば、現在の言語の名前を文字列値として使用できますが、現在の言語に基づいて変更される値を使用するのは少し奇妙です。しかし、getHarbor
コンバータを名前からharborオブジェクトに戻すために変換する必要があります。それは次のようになります。
<select id="cboHarbor" data-link="{getName:activeHarbor:getHarbor}">
{^{for harbors}}
<option data-link="{getName:}"></option>
{{/for}}
</select>
また、あなたはこのように、配列内の港のインデックスを使用することができますコンバータと
<select id="cboHarbor" data-link="{getIndex:activeHarbor:getHarbor}">
{^{for harbors}}
<option value="{{:#index}}" data-link="{getName:}"></option>
{{/for}}
</select>
次のように:
$.views.converters({
getIndex: function (harbor) {
return harbor.index;
},
getHarbor: function (index) {
return data.harbors[index];
},
getName: function (harbor) {
return harbor.name[data.languages[data.currentLanguage]];
}
});
あなたの場合動的に言語を変更し、新しい言語への港湾のドロップダウンスイッチを持つようにするには、getName
コンバータをthなどの現在の言語に依存させる必要があります次のとおりです。
$.views.converters.getName.depends = [data, "currentLanguage"];
ここで言語を切り替えるには、言語のドロップダウンでupdated version of your jsfiddle完全です。
UPDATE:
function getName(harbor) {
return harbor.name[data.languages[data.currentLanguage]];
}
$.views.converters({
getName: getName,
...
});
getName.depends = [data, "currentLanguage"];
だからあなたは、単にあなたのコンバータ機能としてgetName
機能を使用することができ、その後、あなたが持っている文脈で:depends
getName
用に関する
、modified jsFiddleはこのありデータインスタンスへのアクセス(done()
で非同期にする必要がある場合)、次に依存を割り当てます。
getName.depends = [data, "currentLanguage"];
いいえ使用する必要はありません$.views.converters.getName.depends
は、上記の私のUPDATE加え見る – BorisMoore
はどうもありがとうございましたが、私はそれが私の活字体プロジェクトで動作させるように見えることはできません...それは常にgetName.dependsにダウンしていません存在しない。 – ClaudeVernier
私はTypeScriptを使用しません。あなたはあなたのTypescriptコードを指し示して、あなたが何をしているかを示すことができます。私はおそらくそれを見ていつでも過ごすことができません。 - しかし、私は明らかに何かを見た場合... – BorisMoore