2013-12-10 19 views
5

arbeite ich bin relativ neu in der Verwendung der Knockout-JavaScript-Bibliothek. Ich habe ein Problem, eine beobachtbare Eigenschaft zu erhalten, die ein Objekt eines anderen Objekts ist. Hier ist mein Code:Javascript Knockout verschachtelte Objekte Bindung nicht

function Customer(id) { 
    var self = this; 

    self.customer_id = ko.observable(id); 
    self.custnum = -1; 

    self.busname = ko.observable(""); 
    self.address = ""; 
    self.city = ""; 
    self.state_id = ""; 
    self.zipcode = ""; 
    self.cnt_sal_id = ""; 
    self.cnt_first_name = ""; 
    self.cnt_last_name = ""; 
    self.cnt_title = ""; 

    //alert("customer: " + self.customer_id()); 

} 


var CustomerEntryViewModel = function(date) { 
    var self = this; 

    self.last_update = ko.observable(date); 
    self.customer = ko.observable(new Customer("")); 

    self.addCustomer = function (id) { 
     var c = new Customer(id); 
     self.customer = c; 
     alert("New id: " + self.customer.customer_id() + " num: " + c.custnum); 
    } 

    self.customerSearch = function() { 
    } 

    self.editCustomer = function (customer_id) { 
    } 

    self.save = function(customer) {  
    }   
} 

Wie gehe ich über die Bindung an die Eigenschaften im Customer-Objekt. Ich versuche, wie so typisch Javascript Punktnotation zu verwenden: customer.customer_id

Hier ist der HTML ist, die die Daten bindet:

<div class="field-input" style="margin-bottom:10px;"> 
    <input type="text" id="customer_id" style="width:100%;" 
     data-bind="jqxInput: { placeHolder: 'Customer #', value: 
           customer().customer_id, height: 21, width: 208, 
           minLength: 1, disabled: true }"/> 
</div> 

Antwort

11

Seit customer ist eine beobachtbare, müssen Sie entrollen es in Ihrem Bindungen. So wäre es so etwas wie:

<div data-bind="text: customer().address"></div> 

Und in ähnlicher Weise, diese

alert("New id: " + self.customer.customer_id() + " num: " + c.custnum); 

wäre

alert("New id: " + self.customer().customer_id() + " num: " + c.custnum); 
          // ^unrolled 
+0

@ user2864740 - ah, das http://knockoutjs.com/documentation/custom-bindings-c ontrolling-descendant-bindings.html Scheint echt cool. Zu meiner Leseliste hinzugefügt :) –

+0

Adam, danke für die Antwort. Ob Sie es glauben oder nicht, ist dieser Teil funktioniert: alert ("New-ID:" + self.customer.customer_id() + "num:" + c.custnum); Die gleiche Referenz funktioniert jedoch nicht in meinen HTML-Bindungen. – user3088317

-2

die Sie interessieren sollte hilfreich sein:

<div class="field-input" style="margin-bottom:10px;"> 
    <input type="text" id="customer_id" style="width:100%;" data-bind="value: customer().customer_id, disabled: true" /> 
</div> 
+0

Willkommen bei SO, aber bitte hör auf, Antworten hinzuzufügen, die vorhandene duplizieren. – JohnnyHK

Verwandte Themen