2

私は次のviewModelを持っています:

var ViewModel = function (myList) {
    var self = this;

    this.sName = ko.observable($('#s-input').select(0).val());
};

いくつかの検証を行うために、sNameに格納されている値にアクセスしたいと思います。

送信時に、プロパティが特定の値に設定されているかどうかを確認する検証関数を呼び出します。しかし、プロパティsNameにアクセスできません。ドキュメントには、次のように言うことで値にアクセスできると書かれています

ViewModel.sName()

私はそれを動かすことができませんでした。ViewModel.sName()、ViewModel()。sName()などを試しました。

誰かアイデアがありますか?

4

2 に答える 2

2

作成した構造体はコンストラクター関数です。

ViewModel次のような操作を行って、インスタンスを作成する必要があります。

var vm = new ViewModel(list);

次に、vm.sName()オブザーバブルの値にアクセスします。

于 2012-07-10T21:32:37.003 に答える
0

これは必要以上の説明かもしれませんが、オブジェクト定義とオブジェクトを混同しているようです。投稿したコードは、functionではなく を定義していobjectます。最初の行に注意してください。

var ViewModel = function (myList) { ...  

ここでは、本質的に javascript の「クラス」を定義しています (javascript には実際にはクラスはありませんが、便利な用語です)。この定義を と呼びますconstructor。これを呼び出すと、そのタイプのオブジェクトが構築されるためです。オブジェクトのように使用する前に、その型をオブジェクトにインスタンス化する必要があります。

RP Niemeyer がこれを行う方法を示していました。あなたはパラメータconstructorを取るのでmyList、RP はリストを渡しました。通常、ビューモデルの初期データとしてサーバーからこのリストを提供します。特定のケースでは、それを使用していないように見えるので、省略できます。

考慮すべきことの 1 つは、使用している jQuery セレクターをパラメーターとして渡して、再利用できるようにすることです。それは次のようになります。

var ViewModel = function (selector) {
    var self = this;

    self.sName = ko.observable($(selector).select(0).val());
};
var vm = new ViewModel('#s-input');
var name = vm.sName(); //This is your name property!!
于 2012-07-10T23:25:05.933 に答える