2013-09-05 2 views
0

У меня есть две формы типа доставки (с именем, адресом, почтовым индексом и т. Д.) И кнопка «Адрес доставки совпадает с адресом доставки». В основном я пытаюсь сделать так, чтобы при нажатии пользователем этой кнопки одни и те же наблюдаемые из первого поля затем делились со вторым полем. Как я подошел к этому (вероятно, очень ошибочно) заключается в установке двух наборов наблюдаемых как так:Обмен наблюдаемыми

self.firstName = ko.observable(""); 
    self.lastName = ko.observable(""); 
self.phoneNumber = ko.observable(""); 
self.address1 = ko.observable(""); 
self.address2 = ko.observable(""); 
self.city = ko.observable(""); 
self.state = ko.observable(""); 
self.postcode = ko.observable(""); 

    self.delFirstName = ko.observable(""); 
    self.delLastName = ko.observable(""); 
self.delPhoneNumber = ko.observable(""); 
self.delAddress1 = ko.observable(""); 
self.delAddress2 = ko.observable(""); 
self.delCity = ko.observable(""); 
self.delState = ko.observable(""); 
self.delPostcode = ko.observable(""); 

И затем я попытался установить функцию, которая при нажатии, разделит детали доставки в поперечнике.

self.sameDelAddress = function() { 
    self.delFirstName() = self.firstName(self.firstName); 
      self.delLastName() = self.lastName(self.lastName); 
    self.delPhoneNumber() = self.phoneNumber(self.phoneNumber); 
    self.delAddress1() = self.address1(self.address1); 
    self.delAddress2() = ko.observable(self.address2); 
    self.delCity() = ko.observable(self.city); 
    self.delState() = ko.observable(self.state); 
    self.delPostcode() = ko.observable(self.postcode); 
} 
+0

Настроения в оригинальной версии оценили - но, не рекомендуется в SO вопросы! –

+0

Добро пожаловать в Stack Overflow, @Steven! Пожалуйста, взгляните на stackoverflow.com/about, чтобы увидеть формат вопросов, чтобы получить наилучшие ответы! Трудно понять, что ваш вопрос - это не работает для вас? Какие признаки у вас есть, что он не работает? (Например, может быть, когда вы нажимаете, наблюдаемые не разделяются.) – arturomp

+0

Извините, только что просмотрели эти комментарии. все еще привыкший к Stack Overflow, отличный ресурс! Это не работает, и на консоли в Chrome ничего не происходит. Возможно, мне придется долго читать об обработке ошибок. В основном наблюдаемые не назначали своим дельповым аналогам и не говорили мне, почему. Это действительно бросило меня, но с решением Dans я начал понимать больше о том, как переменные назначаются в KO. Я собираюсь прочитать больше об этом (и о разделе SO), и если его охладить, чтобы опубликовать решение, когда я закончил, я опубликую это. –

ответ

0

Я думаю, что вы хотите что-то вроде кода ниже. Посмотрите на this скрипку для рабочего примера.

Попробуйте обновить одно поле после того, как вы установили этот флажок, вы увидите, что другое поле обновляется автоматически.

function addressModel() { 
    var self = this; 
    self.firstName = ko.observable(""); 
    self.lastName = ko.observable(""); 
    self.phoneNumber = ko.observable(""); 
    self.address1 = ko.observable(""); 
    self.address2 = ko.observable(""); 
    self.city = ko.observable(""); 
    self.state = ko.observable(""); 
    self.postcode = ko.observable(""); 
} 

function deliveryModel(shipAddress, billAddress) { 
    var self = this; 
    self.shippingAddress = ko.observable(shipAddress); 
    self.billingAddress = ko.observable(billAddress); 
    self.addressesAreSame = ko.observable(); 

    self.addressesAreSame.subscribe(function(newValue){ 
     if(newValue===true){ 
      self.billingAddress(self.shippingAddress()); 
     }else{ 
      self.billingAddress(new addressModel()); 
     } 
    }); 
} 

var delivery = new deliveryModel(new addressModel(), new addressModel()); 
ko.applyBindings(delivery); 

Binding пример:

<div data-bind="with: shippingAddress"> 
    Shipping Address<br /> 
    <input type="text" data-bind="value: address1" /> 
</div> 
<div data-bind="with: billingAddress"> 
    Billing Address<br /> 
    <input type="text" data-bind="value: address1" /> 
</div> 
<input type="checkbox" data-bind="checked: addressesAreSame" /> Billing same as shipping 
+0

Что делать, если вы снимите флажок? Он по-прежнему обновляет оба. –

+0

@Wojciech Я изменил свой ответ, чтобы обработать выбор и отмену выбора. – PeaceFrog

+0

Большое спасибо за вашу помощь. Дэн! Я попробую это, когда вернусь домой и дам вам знать результаты. Еще раз спасибо за ваше время, это очень ценится! –

Смежные вопросы