2013-10-14 224 views
2

我想一個數組傳遞給視圖模型方法:傳遞一個元素的參數作爲一個數組

self.helpMe = function (myArray) { 

    for (var i=1, ilen=myArray.length, i<ilen, i++) { 
     //do something... 
    } 
} 

有時候我的數組將只包含一個項目和helpMe功能是從另一種方法叫做:

self.saveMe = function (item) { 

    self.helpMe(item.Topics); 

    ... 
} 

其中主題的定義如下

self.Topics = ko.observableArray([]); 

和實例化爲查詢UI項瓦特ith「with」數據綁定。

但是,主題只有一個值[「Sheeps」],那麼myArray.length結果是6而不是1,因爲我希望它是。我哪裏出錯了?

回答

2

好像你的數組實際上是一個字符串,結果是字符串的長度「綿羊」

+1

@AsleG仔細看看如何將'self.Topics'設置爲'[「Sheeps」] – Kierchon

+0

@Kierchon Thanx。你是對的。我把它誤認爲是一個數組,但實際上它是一個逗號分隔的字符串。試圖用 「var helpArray = myArray.split(','); –

1

一個整潔的淘汰賽實用程序,您可以嘗試,而不是..

self.helpMe = function (myArray) { 
    ko.utils.arrayForEach(myArray(), function() { 
     //do something... This iterates through each element of the observableArray 
    } 
} 

請注意,這沒有回答你的問題......只是提出了一個替代方案,這在我看來更容易使用/閱讀。

+0

Thanx解決它。我會盡力記住這些。希望我的淘汰賽技能隨着時間的推移會變得更好。是否有所有這些整潔的ko .utils在任何地方? –

+1

http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html – Adam

+1

'arrayForEach'也會比支持ES5的實現上的索引循環更快(幾乎所有東西但IE6-8),因爲它將簡單地解析爲數組的內置'forEach'方法.jQuery還提供'$ .each()',它的工作方式相同。 – ebohlman

0

我會改變這一行 self.Topics = ko.observableArray([]);

到這一行 self.Topics = ko.observableArray();

和下面的方法

self.helpMe =函數(myArray的){

for (var i=1, ilen=myArray.length, i<ilen, i++) { 
    //do something... 
} 

}

self.helpMe =函數(myArray的){

for (var i=0, i < myArray.length - 1, i++) { 
    self.Topics.push(myArray[i]); 
} 

}