2013-04-18 9 views
8

के साथ किसी फ़ंक्शन में अस्थायी अवलोकन/गणना किए गए अवलोकनों को पार किए बिना निम्नलिखित करने के लिए किसी भी तरह से संभव है?केओ डेटा-बाध्यकारी "पाठ:" पैरामीटर

<span data-bind="text: lookupContactName(31)"></span> 

परिणाम: समारोह exectuded है, पैरामीटर पाया जाता है, तर्क ठीक है, और अभिकलन पूरा नाम दिया जाता है, लेकिन नहीं दिखाया गया है (शायद कोई नमूदार के बाद से)

मैं आम डेटा जो लुकअप डेटा को प्रदर्शित करने के लिए प्रयोग किया जाता है है
<span data-bind="text: lookupContactName(contactId)"></span> 

परिणाम: contactId पार्स नहीं किया गया है इसलिए सही पैरामीटर मान दिखाई नहीं दे रहा है।

मुझे लगता है कि यह सही तरीके से काम करने के लिए मुझे कस्टम बाइंडिंग बनाने की आवश्यकता होगी?

सामान्य रूप से: मैंने थोड़ा सा संदेह करना शुरू किया कि डेटा लोड करने के लिए मेरा दृष्टिकोण केवल एक बार है और आईडी से मिलान करने का प्रयास एक अच्छा तरीका है। कोई विचार? मैं डीबी टेबल/विचार/एसपी के शामिल होने के बेहतर हूँ?

धन्यवाद, जे

यहाँ

, प्रासंगिक कोड टुकड़े मैं उपयोग कर रहा हूँ रहे हैं ... मैं भविष्य की मदद के लिए jsfiddle सीखना होगा।

सभी चेतावनी के अपेक्षित मानों लौट रहे हैं ... लेकिन अभी भी पाठ डेटा-बाइंडिंग मूल्य

एक आम डेटा पुस्तकालय प्राप्त नहीं होता है:

customers.Contact = function() { 
    var self = this; 

    id = ko.observable(); 
    title = ko.observable(); 
    givenname = ko.observable(); 
    surname = ko.observable(); 
    fullName = ko.computed(function() { 
     return title()+". "+givenname()+" "+surname(); 
    }); 

    return { 
     id: id, 
     title: title, 
     givenname: givenname, 
     surname: surname, 
     fullName: fullName 
    }; 
}; 
customers.ContactList = function() { 

    var self = this; 

    contactList = ko.observableArray([]); //.publishOn("ContactList"); 

    loadContactData = function() { 
     var self = this; 

     customers.helperDataService.getContactData(loadContactDataCallBack); 
    }; 

    loadContactDataCallBack = function (json) { 
     var self = this; 

     $.each(json, function (i, p) { 

      var contact = new customers.Contact().id(p.Id) 
                .title(p.Title) 
                .givenname(p.Name) 
                .surname(p.Surname); 

      contactList.push(contact); 
     }); 

    }; 

    lookupContactName = function (id) { 
     var self = this; 

     alert("value to be found: "+id); 

     ko.utils.arrayForEach(contactList(), function (contact) { 
      alert("SEARCH: contactid: " + contact.id() + " - " + "id: " + id); 
      if (contact.id() === id) { 
       alert("FOUND: contactid: " + contact.id() + " - " + "id: " + id); 
       alert("value:" + contact.fullName()); 
       return contact.fullName(); 
      } 
     }); 
    }; 

    return { 
     loadContactData: loadContactData, 
     lookupContactName: lookupContactName 
    }; 
}; 

कौन सा यहाँ से कहा जाता है .. । (मैं इसे contactId (करने के लिए बदल) और इस समारोह के लिए सही मान गुजरता है)

<div>Creator: <span data-bind="text: lookupContactName(contactId())"></span></div> 
+0

मैं बस उत्सुक हूँ की तरह एक कोड की जरूरत है ... क्या करता है 'lookupContactName' लगता है अपने पैरामीटर यदि आप' lookupContactName (contactId) 'का उपयोग है? क्या यह सिर्फ "contactId" स्ट्रिंग प्राप्त करता है? – bdesham

+0

सामान्य रूप से यह काम करना चाहिए। क्या आप शायद एक जेएसएफडल डाल सकते हैं जो आपकी समस्या का प्रदर्शन करता है? – nemesv

+0

लुकअप लुकअप कॉन्टैक्टनाम (contactId) लुकअप में कॉन्टैक्टनाम (contactId()) यह कुछ भी वापस नहीं करने की बजाय सही आईडी देता है। – jcuypers

उत्तर

0

मैं बहुत समझने के लिए तुम्हारी समस्या क्या यहाँ है यकीन नहीं है। यदि आप चाहें तो आप ऐसा कुछ कर सकते हैं:

function lookupContactName(cid) { 
    var obj = ... // Find your object by id; 
    return ko.computed(function() { 
     return obj.name() + obj.lastname(); 
    }); 
} 

यह सिर्फ काम करना चाहिए।

+0

के लिए धन्यवाद दोस्तों के लिए धन्यवाद, मुझे थोड़ी देर का अध्ययन करना है, कभी इसका इस्तेमाल नहीं किया ... मैंने कुछ प्रगति की है, लेकिन अभी भी कोई भाग्य नहीं है।मैं प्रासंगिक कोड पेस्ट कॉपी करूंगा, उम्मीद है कि आप बेहतर समझेंगे। – jcuypers

+0

अरे दोस्तों मुझे एक समाधान (बाईपास) मिला है। समझ में नहीं आता क्यों, लेकिन किसी कारण से वापसी केवल सरणी लूप के बाहर काम करती है ... – jcuypers

3

यदि आपका <span data-bind="text: lookupContactName(contactId())"></span> फ़ोरैच लूप में है तो आपको $ रूट के साथ विधि को प्रीपेड करने की आवश्यकता है या अन्यथा यह सरणी के भीतर "lookupContactName" की तलाश करेगा, यह लूपिंग गड़बड़ है।

प्रयास करें:

<div>Creator: <span data-bind="text: $root.lookupContactName(contactId())"></span></div> 
1

समस्या यह है कि आप समारोह देखने एक मूल्य वापस नहीं करता है

ko.utils.arrayForEach(contactList(), function (contact) { 
// some checking code 
    return contact.fullName(); 
}); 

अपने "वापसी" आंतरिक समारोह उपयोगिता विधि arrayForEach के लिए पारित करने के लिए संबंधित है। आप इस

var result; 
ko.utils.arrayForEach(contactList(), function (contact) { 
// some checking code 
    result = contact.fullName(); 
}); 
return result; 
संबंधित मुद्दे