2017-10-18 41 views
3

在我application.js我有.select2選擇初始化:當我點擊帶有遠程鏈接:真的,不是初始化插件

$(document).ready(function() { 
    $(".select2").select2({ 
    theme: "bootstrap", 
    width: '100%', 
    allowClear: true 
    }); 
}); 

在我的應用程序的其他部分我有remote: true一個鏈接,這使得一個新的形式與下拉與.select2

<%= link_to 'new form' new_feed_item_path, class: 'new-feed-item', remote: true %> 

即作爲響應裝載部分:new.js.erb

$('.feed-content').html("<%= j(render 'form', feed_item: @feed_item) %>"); 

但是,如果以這種方式加載,select不起作用。爲什麼? 我需要重新初始化js嗎? 我在我的應用程序中不使用turbolinks

回答

0

您應該在new.js.erb的範圍內初始化選擇的塊,因爲只有當您重新加載或導航時,纔會從服務器收到JavaScript響應時觸發$(document).ready事件。爲了避免竊聽你的其他選擇,你應該在重新初始化之前銷燬所有的代碼,代碼應該是這樣的:

$('.feed-content').html("<%= j(render 'form', feed_item: @feed_item) %>"); 
$(".select2").select2("destroy"); 
$(".select2").select2({ 
    theme: "bootstrap", 
    width: '100%', 
    allowClear: true 
}); 
+0

我知道這種方法,但我相信它不是最好的。 –

+0

那麼,你可以使用'$(document).ajaxComplete'來代替文檔準備好,但是除了重新初始化之外,你別無選擇。 – ErvalhouS

+0

我已經明白了這一點。這種方式不是很方便,但沒有其他辦法。 –