मुझे लगता है कि यह सबसे अच्छा है प्रदर्शन के लिए हुड के नीचे एक साहचर्य सरणी का उपयोग करें। परिवर्तनों को ट्रैक करने में सक्षम होने के लिए आप (जैसा कि आपने बताया है) एक अवलोकन योग्य ऐरे का उपयोग करने की आवश्यकता है (क्योंकि यह है कि कैसे नॉकआउट काम करता है)।
यदि आप 'नॉकआउट फ्रेंडली' एसोसिएटिव सरणी की तलाश में हैं तो आप शायद आइटम में बदलावों को ट्रैक करने का एक तरीका चाहते हैं (और इस प्रकार निर्भरता श्रृंखलाओं को प्रभावित करते हैं)।
http://jsfiddle.net/rz41afLq/2/
यहाँ मुझे लगता है कि मेरी जरूरतों के अनुकूल के साथ आया है। असल में आप observableArray
में एक महत्वपूर्ण मूल्य जोड़ी संग्रहीत करते हैं और लुकअप उद्देश्यों के लिए प्रतिलिपि संग्रहीत करने के लिए एक मानक सहयोगी सरणी का उपयोग करते हैं। यदि आप कुत्ते की सूची पर pop()
या push()
बुला और यूआई अद्यतन करना चाहते योजना बना रहे हैं
update_item('dogs', ['kim', 'abbey', 'goldie', 'rover']);
update_item('dogs', ko.observableArray(['kim', 'abbey', 'goldie', 'rover']));
(दूसरा केवल आवश्यक है आप:
// VIEW MODEL
var viewModel = {
// we have to use observable array to track changes
items: ko.observableArray([]),
// also use associative array for performance
_assoc: {},
update_item: function(key, value) {
// use a true assoc array for performance
// _assoc[key] = ko.observable(value)
if (viewModel._assoc[key])
{
// update observable (overwriting existing item)
viewModel._assoc[key].value(value);
}
else {
// Important: See how we wrap value with an observable to detect changes
this.items.push(viewModel._assoc[key] = { key: key, value: ko.observable(value) });
}
}
};
तो तुम इस तरह अपने कुत्ते को बचाने के। निश्चित रूप से किसी भी समय आइटम को पूरी तरह अद्यतन करने के लिए update_item
पर कॉल कर सकते हैं, जिस स्थिति में इसे देखने योग्य नहीं होना चाहिए)
कोई मूल्य देखने के लिए, आप गतिशील रूप से इसे लाने के लिए गणना की जाती हैं:
var dogs = getValue('dogs');
फिर जैसे ही साहचर्य सरणी परिवर्तन तो नमूदार dogs()
अद्यतन करेगा (और श्रृंखलित जा सकता है) में 'कुत्तों' के रूप में सूचीबद्ध मूल्य के रूप में। यह dogs
देखने योग्य यूआई के लिए
var getValue = function(key) { return ko.pureComputed(function()
{
// reevaluate when item is added or removed to list
// not necessary if the value itself changes
viewModel.items();
var item = viewModel._assoc[key];
return (item == null) ? null : item.value();
}, viewModel);
धन्यवाद आरपीएन। मेरा डेटासेट 2K तक बढ़ेगा, नहीं, मुझे कोई समस्या नहीं दिख रही है। बीटीडब्ल्यू, ko.utils पर ऑनलाइन एक संदर्भ है? –
वर्तमान में utils के लिए दस्तावेज़ नहीं हैं। वर्तमान में मेरे ब्लॉग से सर्वश्रेष्ठ संसाधन यहां है: http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html –
भयानक। धन्यवाद! –