<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                # Computed Observables 如果你有一個用于 firstName 的 observable 和另一個用于 lastName 的 observable,并且你想顯示全名怎么辦? 這就是計算 observable 的用武之地——這些函數依賴于一個或多個其他 observable,并且會在這些依賴項中的任何一個發生變化時自動更新。 例如,給定以下視圖模型類, ``` function AppViewModel() { this.firstName = ko.observable('Bob'); this.lastName = ko.observable('Smith'); } ``` 你可以添加一個計算的 observable 來返回全名: ``` function AppViewModel() { // ... leave firstName and lastName unchanged ... this.fullName = ko.computed(function() { return this.firstName() + " " + this.lastName(); }, this); } ``` 現在您可以將 UI 元素綁定到它,例如: `The name is <span data-bind="text: fullName"></span> ` 并且它們將在 firstName 或 lastName 更改時更新(每次其任何依賴項更改時都會調用一次您的評估器函數,并且您返回的任何值都將傳遞給觀察者,例如 UI 元素或其他計算出的可觀察對象)。 ***** 一種簡化事物的流行約定 有一個流行的約定可以避免完全跟蹤這一點:如果您的視圖模型的構造函數將對 this 的引用復制到一個不同的變量(傳統上稱為 self)中,那么您就可以在整個視圖模型中使用 self 并且不必擔心它被 重新定義以指代別的東西。 例如: ``` function AppViewModel() { var self = this; self.firstName = ko.observable('Bob'); self.lastName = ko.observable('Smith'); self.fullName = ko.computed(function() { return self.firstName() + " " + self.lastName(); }); } ``` 因為 self 在函數的閉包中被捕獲,所以它在任何嵌套函數中保持可用和一致,例如計算 observable 的評估器。 當涉及到事件處理程序時,這個約定更加有用. ### Pure computed observables 如果您的計算 observable 只是根據一些 observable 依賴項計算并返回一個值,那么最好將其聲明為 ko.pureComputed 而不是 ko.computed。 例如: ``` this.fullName = ko.pureComputed(function() { return this.firstName() + " " + this.lastName(); }, this); ``` 由于此計算被聲明為純計算(即,其評估器不直接修改其他對象或狀態),因此 Knockout 可以更有效地管理其重新評估和內存使用。 如果沒有其他代碼對其有主動依賴,Knockout 將自動掛起或釋放它。 ***** 強制計算的 observables 總是通知訂閱者 當計算出的 observable 返回一個原始值(數字、字符串、布爾值或 null)時,通常僅在值實際發生變化時才會通知 observable 的依賴項。 但是,可以使用內置的通知擴展器來確保計算的 observable 的訂閱者始終在更新時收到通知,即使值相同。 您可以像這樣應用擴展器: ``` myViewModel.fullName = ko.pureComputed(function() { return myViewModel.firstName() + " " + myViewModel.lastName(); }).extend({ notify: 'always' }); ``` 確定一個屬性是否是一個計算出的可觀察對象 在某些情況下,以編程方式確定您是否正在處理計算出的 observable 很有用。 Knockout 提供了一個實用函數 ko.isComputed 來幫助解決這種情況。 例如,您可能希望從發送回服務器的數據中排除計算的 observable。 ``` for (var prop in myObject) { if (myObject.hasOwnProperty(prop) && !ko.isComputed(myObject[prop])) { result[prop] = myObject[prop]; } } ``` 此外,Knockout 提供了類似的函數,可以對 observables 和計算 observables 進行操作: ko.isObservable - 為 observables、observable 數組和所有計算的 observables 返回 true。 ko.isWritableObservable - 為 observables、observable 數組和可寫計算 observables(也稱為 ko.isWriteableObservable)返回 true。 當計算出的 observable 僅在您的 UI 中使用時 如果您只需要在 UI 中使用復合全名,您可以將其聲明為: ``` function AppViewModel() { // ... leave firstName and lastName unchanged ... this.fullName = function() { return this.firstName() + " " + this.lastName(); }; } ``` 現在你在 UI 元素中的綁定變成了一個方法調用,例如: `The name is <span data-bind="text: fullName()"></span> ` Knockout 將在內部創建一個計算的 observable 以檢測表達式所依賴的 observable,并在稍后刪除關聯元素時自動處理它。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看