2013-07-22 12 views
8

Durandal hat eine Basisansicht namens shell.Durandal/Knockout. Anderes View/Viewmodel aktualisieren

Ich habe ein Suchfeld hinzugefügt, um es Administratoren/Qualitätssicherungsbenutzern zu ermöglichen, jeden Systembenutzer nachzuahmen. Auf den Button klicken Ich möchte die Ansicht der aktuell angezeigten Ansicht aktualisieren können.

  • Shell (blau) Ansicht (Red)

Wie würde ich mich über eine Funktion auf meinem Kind Blick aussetzt, so dass ich von so nennen kann Shell oder haken Sie in das Button-Klick-Event der Shell in der untergeordneten Ansicht ein.

Frage:

Hat Durandal keine Haken machen, die ich Verwendung zu sprudeln machen können oder Ereignisse zu unterschiedlichen Ansichten oder übergeordneten Container passieren?

Antwort

11

Sie haben Angenommen, mehrere untergeordnete Ansichten und wollen keine Abhängigkeiten zwischen Schale einzuführen und Kinder ist es wahrscheinlich am besten Durandal Veranstaltung System für diesen Einsatz. Die Shell-Ansicht würde zum Publisher und das Kind zu Abonnenten.

Überprüfen Sie http://dfiddle.github.io/dFiddle-1.2/#/event-aggregator/dFiddle für eine funktionierende Demo.

publisher.js

define(['durandal/app'], function (app) { 

    var message = ko.observable(); 
    var canPublish = ko.computed(function() { 
     return message() ? true : false; 
    }); 

    return { 
     message: message, 
     canPublish:canPublish, 
     publish: function() { 
      app.trigger('sample:event', message()); 
     } 
    }; 
}); 

subscriber.js

define(['durandal/app'], function (app) { 

    return { 
     received: ko.observableArray([]), 
     subscription:ko.observable(), 
     subscribe: function() { 
      var sub = app.on('sample:event').then(function(message) { 
       this.received.push(message); 
      }, this); 

      this.subscription(sub); 
     }, 
     unsubscribe: function() { 
      this.subscription().off(); 
      this.subscription(null); 
     } 
    }; 
}); 

Andere Optionen, die

  • ein gemeinsames Modul, das eine Singleton mit Eigenschaften zurück in Betracht gezogen werden könnte, die sollte sein geteilt zwischen Eltern/Kindern. Nachteil Es muss als Abhängigkeit in allen Eltern/Kindern definiert werden.
  • ein globaler z.B. myApp mit Eigenschaften ... Nachteil: Exposing eine globale
+1

Dies ist so eine verdammt coole Lösung. :) Danke für die Hilfe wieder Rainer. –