2017-06-02 100 views
14

我在啓用淘汰賽庫中啓用延期更新時遇到問題。我已經實現了Jquery數據表作爲一個組件,當瀏覽到具有此組件的視圖時,我可以看到按順序調用以下方法。 Getview>啓動>附加Durandal JS淘汰賽延期更新

一切正常

但是,如果我按F5刷新頁面,而不是從它打破了另一個頁面瀏覽到它和下面的方法被稱爲

Getview>啓動>附加> GetView>激活>附加>分離>分離(不知道爲什麼它最終調用兩次) 它破裂,UI上沒有任何表格顯示,因爲它不能渲染我所知道的,我認爲它與Durandal轉換有關,並且在瀏覽頁面和刷新頁面時有所不同。

這是一個很小的類,複製這個問題對我來說,注意我沒有這個組件我想使用getView方法在一些動態HTML通過從JQueryDT

HTML文件

我創建了一個快速樣品項目需要最低限度的複製問題。 https://bitbucket.org/dchosking1988/deferred-update-example

如果你拉動它並運行它,你會發現當你刷新頁面時,「hello world」會消失,但如果你在標籤頁之間導航,它將不會消失。

一般步驟i用於複製問題是

1)下載示例項目

2)添加測試組件(參見上文示例文件回購)

3)使延遲更新

4)禁止視圖緩存

4)嘗試構成的組件的新實例

編輯給更多信息

*這不是一個jQuery的數據表的問題,它被複制與以下

所以你沒有下載gitRepo,這是我的代碼可以按照以上步驟在示例項目中複製問題。

define([], 
function() { 
    var test = function() { 
     var self = this; 

     var defaultViewHtml = '<div> <h1>Hello World</h1></div>'; 
     var currentView = null; 

     self.getView = function() { 
      console.log('GetView'); 
      if (!currentView) { 
       currentView = $(defaultViewHtml)[0]; 
      } 
      return currentView; 
     }; 

     self.activate = function (activateOptions) { 
      console.log('Activate'); 
     }; 

     self.attached = function (view, parent, settings) { 
      console.log('Attatched'); 
     }; 

     self.detached = function (view, parent) { 
      console.log('Detatched'); 
     }; 
    }; 

    return test; 
}); 

然後這個HTML添加到index.html的,也不要忘記在

<div class="whiteRow"> 
    <div class="container"> 
     <div class="row"> 
      <div class="col-md-12"> 
       <div data-bind="compose: { model: test }"></div> 
      </div> 
     </div> 
    </div> 
</div> 

回答

4

,因爲它調用的代碼兩次,第二次叫這是發生index.js創建類的實例currentView在test.js中保持爲空,我評論了你設置currentView和代碼工作的地方。

self.getView = function() { 
       console.log('GetView'); 
       //if (!currentView) { 
       // currentView = $(defaultViewHtml)[0]; 
       //} 
       return currentView; 
       }; 

-

<div class="whiteRow"> 
    <div class="container"> 
     <div class="row"> 
      <div class="col-md-12"> 
       <div data-bind="compose: { model: test }"></div> 
      </div> 
     </div> 
    </div> 
</div> 
1
define([], 
function() { 
var test = function() { 
    var self = this; 

    var defaultViewHtml = '<div> <h1>Hello World</h1></div>'; 
    var currentView = null; 

    self.getView = function() { 
      console.log('GetView'); 
      return currentView; 
      }; 

    self.activate = function (activateOptions) { 
     console.log('Activate'); 
    }; 

    self.attached = function (view, parent, settings) { 
     console.log('Attatched'); 
    }; 

    self.detached = function (view, parent) { 
     console.log('Detatched'); 
    }; 
    }; 

    return test; 
}); 

currentView在test.js留空,