1

したがって、メインページにノックアウトバインディングがあるシナリオがあります。

インデックス.cshtml:

<div data-bind="foreach breadcrumbs">
<div>

<script>
 var IndexViewModel = function () {
    var self = this;
    self.breadcrumbs = ko.observableArray();
 };
 ko.applyBindings(IndexViewModel);
</script>

そして、Index.cshtml 内に読み込まれる部分ビュー。部分ビューには独自のノックアウト バインディングがあります。

<div id="someId">

</div>
<script>
  var PartialViewModel = function () {
        var self = this;
        self.someFunction = function(){
            // Access Breadcrumbs here
        };
  };
  ko.applyBindings(PartialViewModel, "someId");
</script>

2 番目の部分ビューからパンくずリストの observableArray にアクセスし、項目を追加したいと考えています。これが可能かどうかさえわかりません。助けてください。私も sammy.js を使用していますが、この目的にはあまり関係ありません。

4

2 に答える 2

2

ビュー モデル間に依存関係が必要になるのは好きではないので、以前は jQuery pubsub プラグインを使用して、ビュー モデルが互いに分離した方法で通信できるようにしました。この回答でその例を見ることができます

基本的に、ブレッドクラムを更新するときは、新しい配列で publish を呼び出すと、他のビュー モデルがそのイベントをサブスクライブします。

于 2013-01-30T14:31:43.110 に答える
0

簡単な解決策 (ただし、あまりクリーンではない) は、indexViewModel をグローバル変数に格納することです。

インデックス.cshtml:

 var IndexViewModel = function () {
    var self = this;
    self.breadcrumbs = ko.observableArray();
 };
 // we create a global variable here
 window.indexViewModel = new IndexViewModel();

 ko.applyBindings(window.indexViewModel);

そして、部分ビュー モデルからこの indexViewModel にアクセスできます。

  var PartialViewModel = function () {
        var self = this;
        self.someFunction = function(){
            // Access Breadcrumbs here
            // better use some wrapping functions 
            // instead of accessing the array directly
            window.indexViewModel.breadcrumbs.push({}); 
        };
  };
  ko.applyBindings(new PartialViewModel(), "someId");
</script>
于 2013-01-30T14:44:27.447 に答える