-2

2 Model で knockout.js を使用していますが、これは機能しません。

function AppViewModel1(Name) {
    this.firstName = ko.observable(Name.fn);
    this.lastName = ko.observable(Name.ln);
}

function AppViewModel2(Name) {
    this.first = ko.observable(Name.fn);
    this.last = ko.observable(Name.ln);
}

 ko.applyBindings(new AppViewModel1({ fn : "yahoo", ln: ".in" }));
 ko.applyBindings(new AppViewModel2({ fn : "gmail", ln: ".com" }));

どこが間違っているのか、誰か説明してもらえますか?

4

2 に答える 2

2

通常、Knockout は単一のビュー モデルへのバインドのみを許可します。

ビュー モデルには、他の JS オブジェクト/クラスへの参照を含めることができますが、バインドできるビュー モデルは 1 つだけです。

ただし、Knockout で複数のビュー モデルをバインドするために使用できるプラグインがあります。

https://github.com/hunterloftis/knockout.namespaces

それを見て、問題が解決するかどうかを確認してください

于 2012-07-28T19:57:36.243 に答える
1

バインディングが適用されるDOMの部分を制限する必要があります。同じページ/ドキュメントに複数のビューモデルをバインドすることはできますが、重複させることはできません。したがって、いくつかのIDを指定し、ページの個別の部分へのバインドを制限します。

オプションで、2番目のパラメーターを渡して、データバインド属性を検索するドキュメントの部分を定義できます。たとえば、ko.applyBindings(myViewModel, document.getElementById('someElementId'))。これにより、IDがsomeElementIdの要素とその子孫にアクティブ化が制限されます。これは、複数のビューモデルがあり、それぞれをページの異なる領域に関連付ける場合に便利です。

Knockoutobservablesドキュメントから

例:

function AppViewModel1(Name) {
    this.firstName = ko.observable(Name.fn);
    this.lastName = ko.observable(Name.ln);
}

function AppViewModel2(Name) {
    this.first = ko.observable(Name.fn);
    this.last = ko.observable(Name.ln);
}

ko.applyBindings(new AppViewModel1({ fn : "yahoo", ln: ".in" }),
    document.getElementById('gmailArea'));
ko.applyBindings(new AppViewModel2({ fn : "gmail", ln: ".com" }),
    document.getElementById('yahooArea'));

ページの同じ部分内の同じビューモデルに絶対にアクセスする必要がある場合は、すべてを1つのビューモデルにマージする必要があります。きれいではありませんが、cestlavieです。

例えば

function AppViewModel1(Name) {
    this.gmailFirstName = ko.observable(Name.gmailFn);
    this.gmailLastName = ko.observable(Name.gmailLn);

    this.yFirst = ko.observable(Name.yFn);
    this.yLast = ko.observable(Name.yLn);
}

ko.applyBindings(new AppViewModel1({ gmailFn: "google", gmialLn: ".com", yFn : "yahoo", yLn: ".in" }));

名前空間のplulginjimmymリンクは使用していませんが、興味をそそられるようです。

于 2012-07-29T03:48:00.853 に答える