0

重複の可能性:
オブジェクトリテラルとして宣言されたノックアウトビューモデルと関数の違い

私はKnowckoutMVVMフレームワークで作業していますが、これは初めてです。私は過去1ヶ月半の間それを使用していて、それは今のところまともです。さて、私がWebやその他の場所で見たすべての例では、viewmodelを次のような宣言を持つObject変数のようなものとして定義しています。

var ViewModel = {};

それは完全に理解できました。しかし

最近、関数として宣言されているコードモデルをいくつか見ました。

のような何か

var ViewModel = function(){
self = this;

// some code in conventions with var member = {} instead of member:{}

}

それだけでなく、ビューモデルを実際に使用する場合は、ビューモデルをインスタンス化する必要があります。

私はそれをビューモデルを表現するための完全に新しい方法だと考えており、従来のビューモデル宣言アプローチよりも優れていることを理解できていません。

誰かがこれに光を当ててくれませんか?

4

2 に答える 2

1

この回答は、オブジェクトリテラルとビューモデルを定義するための関数を使用した場合の違いを説明しています。オブジェクトリテラルとして宣言されたノックアウトビューモデルと関数の違い

于 2012-09-23T20:40:06.993 に答える
0

ViewModelのロジック全体をこのコンストラクター関数に含める(カプセル化する)ことができるため、より優れています。ロジックは非常に複雑になる可能性があります。これには、グローバルではなくなった新しい関数や変数の定義を含めることができます。

私は次のパターンを見つけます:

ko.applyBindings((function() {

    // Define local variables and functions that view model instance can access and use,
    // but are not visible outside this function.

    var firstName = ko.observable("John");
    var lastName = ko.observable("Doe");

    var getFullName = function() {
        return firstName() + " " + lastName();
    };

    // Return view model instance.
    return {
        fullName : ko.computed(getFullName)
    };

})());

新しいグローバル変数(コンストラクター関数など)を導入せず、優れたカプセル化機能を備えているため、さらに優れています。

于 2012-09-23T20:48:04.213 に答える