Я пытаюсь создать форму входа и регистрационную форму на той же странице. Для этого мне нужны две модели. Я создаю их, как показано ниже.Нокаут с двумя моделями просмотра на одном экране
На моей странице у меня есть два отдельных divs с именем «login-form» и «register-form».
Я пытаюсь применить каждую модель представления к соответствующему DIV.
Примечание. Я связываю несколько полей с тем же именем, потому что данные получены из модели MVC.
@Html.TextBoxFor(x => x.EmailAddress, new { @class = "form-control", @placeholder = "Your Email Address", @type = "email", data_bind = "value: EmailAddress" })
Эта строка отображается в обоих DIVs, но каждый div имеет отдельную модель представления, назначенную (или так я полагаю).
<script type="text/javascript">
var loginViewModel = function() {
var self = this;
EmailAddress = ko.observable("");
Password = ko.observable("");
EnableLogin = ko.computed(function() {
if (self.EmailAddress() != "" && self.Password() != "")
return true;
return false;
})
}
var registerViewModel = function() {
var self = this;
EmailAddress = ko.observable("");
Password = ko.observable("");
PasswordRetype = ko.observable("");
TimeZoneID = ko.observable(0);
EnableRegister = ko.computed(function() {
if (
self.EmailAddress() != ""
&& self.Password() != ""
&& self.PasswordRetype() != ""
&& self.Password() == self.PasswordRetype()
&& self.TimeZoneID() > 0
)
return true;
return false;
})
}
ko.applyBindings(loginViewModel, $("#login-form"));
ko.applyBindings(registerViewModel, $("#register-form"));
</script>
Однако, когда я обновляю адрес электронной почты в текстовом поле электронной почты Логина-форме, в значении получает назначение в текстовом поле логина-форме, а также. Таким образом, оба элемента управления связаны каким-то образом.
Однако, когда я редактирую адрес электронной почты в регистрационной форме, он не обновляется в форме входа. Таким образом, это похоже на одностороннюю связь.
Является ли это возможным? Как я могу привязать два отдельных div к их правильной модели просмотра?
Я уже пытаюсь использовать второй параметр: ko.applyBindings (registerViewModel, $ ("# register-form")); - Но это не работает. Я могу попробовать твою вторую идею. – Craig
Ой, может быть, '# register-form' все еще недоступен в DOM, когда вы вызывали ko.applyBindings. – Adrian