2012-04-01 12 views
4

ビューモデルの外でデータにアクセスできるようにしたい。だからビューモデルオブジェクトを作成しましたが、そのプロパティをバインドするのに問題があります。私のビューモデルでは、すべてが適切に機能していることに注意してください。Knockout.jsビューのモデル外のメソッドを呼び出す

基本的に単純化された擬似コード:私は私のモデル内createUsersメソッドを呼び出した場合

function Users() { 
    name; 
    date; 
} 

function userHealthModel() { 
    function createUsers() { new Users[] }; 
} 

self.userModel = ko.observable(new userHealthModel()); 
self.userModel.createUsers(); 

私のバインドが正常に動作します。ここで

は私の問題に注意し、jsFiddleであるJSの最後にすべての方法ですが、私はそれを次のようにコメントし http://jsfiddle.net/fourgates/jpk22/1/

私はJSとKOに新たなんです。 $ root、$ parentなどの使い方が分かりません。仲間のプログラミング愛好家を助けてください!事前に多くの感謝!

+0

何らかの形で「うまくいきません」という大きなコードを投稿するのではなく、特定の質問をしてください。あなたはすでにたくさんの設定をしているので、正確にどこに苦しんでいますか? – Niko

+0

私は怠惰を許して申し訳ありません私はこれを書いたときに私は非常に疲れていた、ちょうど昼寝を取った。私はjsfiddleで質問を書き直しました。 しかし、基本的に私のviewModelオブジェクトのプロパティをバインドするのに問題がありました。 –

答えて

10

私はまだ私はあなたが何をしようとして理解しますが、ここではあなたのフィドルのコードについていくつかの考えであれば、100%わからない:あなたは

var self = this; 
のようなものを持っている場合は

グローバルスコープ内(=関数内ではない)では、thisがウィンドウオブジェクトを指しています。したがって、これは意味をなさない。

self.userModel = ko.observable(new userHealthModel()); 

ビューモデルのオブザーバブルを作成する必要はありません。モデル全体が変更されるとは思わないでしょうか?常にユーザーモデルを維持し、突然「メッセージモデル」などになることはありません。

あなただけのインスタンスを作成し、外部から自分のビューモデルのメソッドを呼び出したい場合:

var userModel = new userHealthModel(); 
userModel.createUsers(); 

// Use "userModel" to access the methods and properties 
// like you're using "self" inside the view model: 
userModel.users2()[1].userId(5); 

// now apply the binding to THE SAME view model 
ko.applyBindings(userModel); 

http://jsfiddle.net/jpk22/3/

これはあなたが探していたものではない場合、私に知らせて!

+0

ありがとう、ちょうど私がやろうとしていたこと!そのモデルが観察可能ではないということは意味をなさない。助けてくれてありがとう! –

関連する問題