我使用BackboneJS,我有一個集合,它從一個啓用oData的WebAPI獲取它的數據。在獲取數據時,我使用oData $ filter傳入一些額外的參數。Javascript,BackboneJS,oData單引號在請求
它看起來有點像這樣:
collection.fetch({
data: $.param({ '$filter': 'Filter1 eq ' + filter.get('filter1') +
' and Filter2 eq ' + filter.get('filter2') }),
//some more stuff...
})
我基本上通過嚮導運行和建設一路此過濾器模型。來自此過濾器模型的每個值都是一個字符串值或一個空字符串。我已經重寫了過濾器模型上的get方法,以確保我從中獲得正確的值。請注意,如果字符串值不是空的,如果它是空的,則返回包含單詞'null'的字符串值。
var Filter = Backbone.Model.extend({
get: function (attributes, options) {
var value = Backbone.Model.prototype.get.call(this, attributes, options);
if (value == '') return 'null';
else return "'" + value + "'";
}
});
說我的模型是這樣的:
{filter1: 'filter1', filter2: 'filter2'}
現在,如果我取的Chrome和Firefox的集合,即生成看起來像這樣的要求:
replacedapiurl?%24filter=Filter1+eq+%27filter1%27+and+Filter2+eq+%27filter2%27
這是非常好的,它在Firefox和Chrome都很棒。我遇到的問題是,在IE10中這是行不通的。由於某種原因,生成的請求看起來像這樣:
replacedapiurl?%24filter=Filter1+eq+'+filter1+'+and+Filter1+eq+'+filter1+'
當我將它設置爲IE9模式時,它會執行相同的操作。當我將它設置爲IE8模式時,它突然開始工作。
現在我已經嘗試使用EncodeURI(),EncodeURIComponent(),escape()並在單引號前添加'\',這兩個都在我重寫的get方法內部和$ .param位內。但沒有任何工作。添加'\'什麼都不做,所有編碼都是這樣編碼添加的'+'符號:
replacedapiurl?%24filter=Filter1+eq+'%2520filter1%2520'+and+Filter1+eq+'%2520filter1%2520'
這也不是我所追求的。
有誰知道爲什麼會發生這種情況?爲什麼IE瀏覽器版本與這種行爲有區別?我該如何解決它?我需要將我的單引號轉換爲'%27',最好不必編寫任何瀏覽器特定的代碼。
編輯:我只是有人在IE9上檢查的東西,並且工作正常,所以只有在使用IE10時 - 以及在IE9模式下使用IE10時 - 它不起作用。
無論如何,OptionView有什麼用?它沒有任何行爲,難道你不能循環遍歷包含父模板中選項值的數組或對象。 – andho
不錯,謝謝,我正在玩Marionette CompositeView和ItemView來看看事情是如何工作的,但是,在這種情況下,我不需要這個選項視圖。 –