È possibile in alcun modo eseguire quanto segue senza dover passare per osservabili temporanei/osservabili calcolati? Ho dati comune che viene utilizzato per le ricerche per visualizzare i dati:KO "text-binding" text: "a una funzione con un parametro
<span data-bind="text: lookupContactName(31)"></span>
risultato: la funzione è exectuded, il parametro viene trovato, la logica ok, e il nome completo calcolato viene restituito, ma non visualizzata (probabilmente dal momento che non osservabile)
<span data-bind="text: lookupContactName(contactId)"></span>
risultato: contactID non viene analizzato in modo corretto il valore del parametro non è visibile.
Suppongo che funzioni correttamente e che sia necessario creare associazioni personalizzate?
in generale: ho iniziato a dubitare un po 'se il mio approccio per caricare i dati solo una volta e provare a far corrispondere gli id è un buon approccio. qualche punto di vista? sto meglio di creare tabelle/viste db/SP unite?
Grazie, J.
qui, sono i pezzi di codice rilevanti sto usando ... imparerò jsfiddle aiuto futuro.
ALL di ALERT stanno tornando i valori attesi ... ma ancora il testo di associazione dati non riceve il valore
Una libreria di dati comune:
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
};
};
che viene chiamato da qui .. . (ho cambiato in contactID() e questo passa il valore corretto alla funzione)
<div>Creator: <span data-bind="text: lookupContactName(contactId())"></span></div>
Sono solo curioso ... che cosa significa 'lookupContactName' pensa il suo parametro è se si utilizza' lookupContactName (contactID) '? Ha appena ottenuto la stringa "contactId"? – bdesham
In generale questo dovrebbe funzionare. Puoi forse mettere insieme un JSFiddle che mostri il tuo problema? – nemesv
Changed lookupContactName (contactId) in lookupContactName (contactId()) questo fornisce l'id corretto invece di non restituire nulla. grazie per il testa a testa – jcuypers