2015-05-13 3 views
7

क्या डिफ़ॉल्ट रूप से सभी अवलोकनों को सीमित करने के लिए knockout.js में कोई तरीका है?डिफ़ॉल्ट रूप से सभी अवलोकनों को सीमित करने की दर

मैं अपने सभी अवलोकनों को एक-एक करके extend नहीं करना चाहता हूं।

+0

क्या दर सीमा वैश्विक सेटिंग या समायोज्य होगी? – BillPull

+1

आपको वास्तव में ऐसा नहीं करना चाहिए जबतक कि आप वास्तव में नहीं जानते कि आप क्या कर रहे हैं या अवलोकन के बहुत सीमित अनुप्रयोग हैं। क्योंकि उनमें से सभी को सीमित करने का मतलब यह होगा कि निर्भरता यादृच्छिक क्रम में ट्रिगर होगी और आपका तर्क कभी-कभी काम कर सकता है लेकिन दूसरी बार तोड़ सकता है। इसके अलावा आप किसी भी चीज़ के साथ गड़बड़ करेंगे जो देखने योग्य भी उपयोग करता है। इस तरह पागल चीजें करते समय बस सावधान रहें। – Milimetric

+0

यह एक ऐसा कार्य हो सकता है जो मेरी प्लगइन [नॉकआउट-डिफर्ड-अपडेट] (https://github.com/mbest/knockout-deferred-updates) के लिए उपयुक्त है। हम नॉकआउट के अगले संस्करण के लिए समान कार्यक्षमता प्रदान करने की प्रक्रिया में भी हैं। –

उत्तर

1

आप ko.observable पर एक फ़ंक्शन बना सकते हैं जो आपके कोड में कुछ वाक्य रचनात्मक चीनी जोड़ देगा। http://knockoutjs.com/documentation/fn.html

तो बजाय लेखन के

ko.observable(value).extend({rateLimit: 500})

यह ko.observable(value).limit(500)

मैं अभी तक इस परीक्षण किया नहीं किया लिखने के लिए संभव हो सकता है, लेकिन यह या संभवतः एक कस्टम बंधन की खोज के लायक हो जाएगा data-bind="rateLimitValue: fullName"

4

आप कर सकते हैं ko.observable के बजाय उपयोग करने के लिए एक समारोह बनाएँ। मैं इस बस को बचाने के लिए टाइपिंग करते हैं, अपने आप को: var KOB = ko.observable;

अपने मामले के लिए, यह हो सकता है (कुछ) की तरह:

var KOB = function (value) { 
    return ko.observable(value).extend({rateLimit:500}); 
}; 
2

बंदर देखते हैं, बंदर कार्य करें: बंदर पैच!

लेकिन सबसे पहले, मुझे यह कहना है कि AFAIK को नॉकआउट सुविधा के साथ जो भी करना है, उसे करने का कोई तरीका नहीं है; सभी भविष्य के अवलोकनों के लिए डिफ़ॉल्ट दर सीमा निर्धारित करने के लिए कोई वैश्विक सेटिंग (ko.globalSettings["defaultRateLimit"] जैसी कोई भी चीज़ नहीं है)।

फिर भी, बंदर पैच को नॉकआउट करने का एक तरीका है जैसा कि आप पूछते हैं। हालांकि, मैं इसे एक देर से/आखिरी उपाय मानता हूं: बंदर पैचिंग के साथ आप कभी नहीं जानते कि यह एक ढांचे की भविष्य की रिलीज को कैसे प्रभावित करेगा। इसके अलावा, यह ko.observable को अपरिवर्तनीय रूप से बदल देगा ताकि आप जो भी पूछें, कोई अपवाद नहीं है।

(function() { 
 
    var originalObservableFn = ko.observable; 
 
    ko.observable = function(x) { 
 
    return originalObservableFn(x).extend({rateLimit: 1500}); 
 
    } 
 
})(); 
 

 
var vm = { 
 
    myValue: ko.observable("initial value") 
 
}; 
 

 
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 

 
Change value here: <input data-bind="textInput: myValue" autofocus /><br /> 
 
Read only version: <span data-bind="text: myValue"></span>

एक और अधिक दायरे वाले समाधान के लिए मैं @RoyJ's solution जहां आप क्या चाहते करने के लिए एक नया आशुलिपि समारोह बनाने की सलाह देते हैं। यह आपको थोड़ा अधिक नियंत्रण की अनुमति देता है, जो बहुत अच्छा है क्योंकि मैं किसी भी व्यावहारिक उत्पादन परिदृश्य की कल्पना नहीं कर सकता हूं जहां आप सभी अवलोकन दर सीमित हैं, कम से कम नहीं, क्योंकि यह यूनिट को थोड़ा कठिन बनाता है क्योंकि अपडेट असीमित हो जाते हैं ।

पाठ्यक्रम का एक अंतिम विकल्प फोर्क नॉकआउट स्वयं होगा, जो source is available on GitHub के रूप में आसान है।

संबंधित मुद्दे