2013-02-25 15 views
7

क्या एम्बर में प्रत्येक इटरेटर के लिए तोड़ने का कोई तरीका है?एम्बरजेएस: क्या यह हर किसी के लिए तोड़ना संभव है?

मैंने कॉलबैक (एक ला jQuery) में झूठी वापसी करने की कोशिश की लेकिन यह काम नहीं करता है।

धन्यवाद! पीजे

उत्तर

7

एम्बर मूल Array.prototype.forEach का उपयोग करता है यदि यह उपलब्ध है, और यदि नहीं है तो इसे अनुकरण करता है। https://github.com/emberjs/ember.js/blob/v1.0.0-rc.1/packages/ember-metal/lib/array.js#L45 देखें।

जावास्क्रिप्ट forEach तोड़ने का समर्थन नहीं करता है। देखें https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach

+0

धन्यवाद जेम्स और सब। मुझे लगता है कि मैं समय के लिए()) और jQuery iterator का उपयोग करने के लिए होगा। – PJC

0

नहीं, मैं foreach कोड को देखकर, सीएफआर जेम्स नहीं सोचता, आप देख सकते हैं कि यह हुड के नीचे लूप का उपयोग करता है। आप एक अपवाद फेंक सकते हैं, लेकिन यह स्पैगेटी कोड लिखना पसंद है। लेकिन यह संभव हो सकता है, आप github पर एक सुविधा अनुरोध कर सकते हैं? या अपने स्वयं के कार्यान्वयन को लिखें जो लूप के लिए टूटता है।

12

आप Array#some या Array#every

[1,2,3].some(function(element) { 
    return true; // Break the loop 
}); 

[1,2,3].every(function(element) { 
    return false; // Break the loop 
}); 

अधिक जानकारियां here

0

उपयोग Array#find का उपयोग करें और सही लौट लूप से बाहर तोड़ने के लिए कर सकते हैं।

0

toArray का उपयोग कर संभावित रूप से सरणी के क्रम को हटा सकते हैं, जो इस उद्देश्य को हरा देता है। आप लूप के लिए सामान्य का उपयोग कर सकते हैं लेकिन इसे आपके लिए काम करने के लिए objectAt का उपयोग करें।

var emberArray = [ ... Array of Ember objects ... ], 
    min = 3, 
    max = emberArray.get('length'), 
    targetObject; 

for(var i = min; i < max; i++){ 
    targetObject = emberArray.objectAt(i); 

    if(targetObject.get('breakHere')) { 
     break; 
    } 
} 

यह आपको एक निश्चित सूचकांक में शुरू करने के लिए अनुमति देने के अतिरिक्त लाभ है, तो आप कर सकते हैं मदों की सबसे छोटी संख्या के माध्यम से लूप।

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