2016-11-03 6 views
0

私はKnockout.jsに基づいてコードベースをリファクタリングしており、問題に悩まされています。 コードは、テンプレートをtypescriptなどの補間された文字列として使用します。Knockout.js:変数を明示的にすべてのビューモデルに入れずにバインディングで使用できるように、すべてのビューモデルで変数を使用できるようにする方法は?

var template = `<div title='${Resources.string1}'> ${Resources.string1} </div>` 

JavaScriptにコンパイルされた後に、文字列に単一引用符が含まれることがあり、時には適切なHTML解析が中断されるという問題があります。

私はそれがすべてのビューモデルで表示されるように、私はこの

<div data-bind="title: Resource.string1"> ${Resources.string1} </div> 

と同じように使用できるように、明示的にすべてのビューモデルにリソースオブジェクトを追加することなく、リソースのオブジェクトを公開する

var template = `<div title='I have a ' single quote'> I have a ' single quote</div>` 

か私はこのリソースオブジェクトをバインドして、アプリ内のすべてのビューモデルからアクセスできます。

+0

おそらく$ rootオブジェクト(http://knockoutjs.com/documentation/binding-context.html)をグローバルオブジェクトを保持するためのコンテナとして使用できます。 – TSV

+0

すべてのビューモデルについて話しているときは、それらがメインビューモデルのすべてのサブビューモデルであるか、個々のビューモデルであることを意味しますか? –

+0

@ Matt.kaaj個々のビューモデルです。 –

答えて

1

グローバル変数は問題なく参照できます。

この1つは、ここでデモfiddleが動作します。

var Resources = { 
    string1: "something here with ' quote" 
} 
window.Resources = Resources; 

ko.applyBindings({}); 

<div data-bind="text: Resources.string1"> 
</div> 

ただし、これはハックのような感じです。むしろ、リソースのためにいくつかのHTMLエンコーディングを使用したいと思います。いくつかの可能性を参照してくださいhere。私はgetResource関数を追加し、要求されたリソースを適切にエンコードされた形式で返すようにします。

関連する問題