2015-10-13 26 views
1

我正在做一個AJAX調用並取回一個pratialView。 在這pratialView我有我想要執行的腳本。 在互聯網上搜索後,我發現我需要使用「eval」才能完成這項工作。在這之後,我發現$ .load()方法爲我做了這個。

但是它不是爲我工作。

我的代碼:

查看:

getView: function (url, callback, options) { 
    var settings = { 
     target: "#contentContainer" 
    } 

    $.extend(settings, options); 

    $.LoadingOverlay("show"); 

    $(settings.target).empty().load(url, function (data) { 

     if (callback) 
      callback(); 
     $.LoadingOverlay("hide"); 
    }); 
} 

爲$ .load()jQuery的文檔:

<div class="col-md-12" id="headerContainer"> 
    <div class="col-md-4 col-xs-12 itemContainerHeader"> 
     <h4> Namn</h4> 

    </div> 
    <div class="col-md-4 col-xs-12 itemContainerHeader"> 
     <h4> Epost</h4> 
    </div> 
    <div class="col-md-4 col-xs-12 itemContainerHeader"> 
     <h4> Nummer</h4> 
    </div> 
</div> 

@foreach (var c in Model.Customers) 
{ 
    <div class="col-md-12 col-xs-12 containerListItem"> 

     <div class="col-md-4 col-xs-12"> 
      @(c.FirstName + " " + c.LastName) 
     </div> 
     <div class="col-md-4 col-xs-12"> 
      @c.Email 
     </div> 
     <div class="col-md-4 col-xs-12"> 
      @c.PhoenNumber 
     </div> 


    </div> 

} 


@section Scripts { 
    <script type="text/javascript"> 
      $.scissors.customers.init(); 
    </script> 
} 

init方法與AJAX加載頁面時,將無法得到執行:

腳本執行

使用不帶後綴選擇器 表達式的URL調用.load()時,在刪除腳本 之前將內容傳遞給.html()。這會在腳本塊被丟棄之前執行。如果 .load()被調用以附加到URL的選擇器表達式, 然而,腳本之前DOM剝出被更新, ,因此不執行。這兩種情況的例子如下:

這裏,作爲文檔一部分加載到#a中的任何JavaScript將成功執行 。

1 $( 「#A」).load( 「article.html」);

我錯過了什麼?

+1

我想你需要的腳本之前加載庫。 – Jai

+0

它被加載到佈局頁面中,並且在我登錄後不斷出現在 – ThunD3eR

回答

0

過了一會兒,我想通了這一點。

問題是剃刀語法在這裏:

@section Scripts { 
    <script type="text/javascript"> 
      $.scissors.customers.init(); 
    </script> 
} 

我做一個AJAX調用和返回partialView,當新的HTML被追加到DOM的瀏覽器不知道如何讀的剃刀語法。

我只是去掉這樣的剃刀語法和它的工作:

<script type="text/javascript"> 
     $.scissors.customers.init(); 
</script> 

不過,我想指出,這是/是不是最佳做法soloution。 我有一個函數getView也接受回調參數,這是更好的做法是調用init函數回調,像這樣:

 $.scissors.worker.getView("/Customer/GetCustomer", function() { 
      $.scissors.customers.customerCard.edit.init(); 
     }, options); 
1

這個腳本:

$.scissors.customers.init(); 

如果主要觀點已在全球範圍加載庫只得到執行。即在頁面的頭部分庫:

<script src='jquery.js'></script> 
<script src='scissors.js'></script> 

如果scissors.js是在全球範圍內可用,那麼你的腳本將得到執行,當你​​。

+0

中澄清:我的腳本加載到masterpage中,並且可以訪問,但由於某些原因,load()函數似乎沒有包含腳本 – ThunD3eR