我正在使用Backbone將Web服務移植到單頁web應用程序中。有一個基本的佈局,包括一個標題,一個空的div#content
,我附加的意見和頁腳。導致衝突的多個視圖實例中的代碼
每條路線都會創建相應的視圖並將其附加到div#content
,替換之前用新視圖呈現的視圖。
我正在使用require.js
加載主幹應用及其依賴關係。 所有Backbone代碼都很小,只有一個文件,因爲我只使用路由器和視圖。 此AMD模塊取決於在視圖中使用的util.js
文件導出功能。 視圖被創建並呈現後,它會執行它需要的實用程序(jQuery的東西,ajax等),從util.js
。
問題是,當我渲染視圖時,它會調用實用程序,當我導航到另一條路線並創建一個新視圖時,現在會調用新視圖的實用程序,但舊視圖的實用程序仍在運行。
在某些時候,我有來自五個視圖的實用程序完全運行,有時會導致衝突。
它比我的方法明確的不夠好,我應該有辦法stop/start
公用事業充當某種服務。
我會貼上相關的代碼,顯示我目前的做法:
require(["utilities"], function(util) {
...
Application.view.template = Backbone.View.extend({
el: "div#content",
initialize: function(){
this.render();
},
render: function(){
var that = this;
// ajax request to html
getTemplate(this.options.template, {
success: function(template) {
var parsedTemplate = _.template(template, that.options.templateOptions || {});
that.$el.html(parsedTemplate);
// execute corresponding utilities
if(that.options.onReady) {
that.options.onReady();
}
},
error: function(template) {
that.$el.html(template);
}
})
}
});
...
Application.router.on('route:requestPayment', function(actions) {
var params = { template: 'request-payment', onReady: util.requestPayment };
var view = new Application.view.template(params);
});
...
});
util.requestPayment
由具有使模板工作所需要的所有東西的函數。
我很困惑應該如何處理這個問題。我希望我很清楚,任何建議或幫助將不勝感激。
編輯:utilities.js
片段:
...
var textareaCounter = function() {
$('#requestMessage').bind('input propertychange', function() {
var textarea_length = 40 - $(this).val().length;
if(textarea_length === 40 || textarea_length < 0) {
$('#message-counter').addClass('error').removeClass('valid');
$("#submitForm").attr('disabled', 'disabled');
}
else if(textarea_length < 40 && textarea_length > 0) {
$('#message-counter').removeClass('error');
$("#submitForm").removeAttr('disabled');
}
$('#message-counter').text(textarea_length);
});
}
...
var utilities = utilities || {};
...
utilities.requestPayment = function() {
textareaCounter();
initForm();
preventCatching();
requestPaymentCalcFallback();
};
...
return utilities;
...
你爲什麼從initialize()裏面調用.render()?您能否發佈utilities.js文件的片段,它有什麼作用? – mamoo 2013-02-25 07:05:01
@mamoo避免必須從另一行渲染它們。 – jviotti 2013-02-25 07:06:14
@mamoo,utilities.requestPayment它就是模塊公開的內容。我只複製了一個功能的定義。其他的是類似的,只是jQuery的東西和一些AJAX輪詢 – jviotti 2013-02-25 07:12:18