У меня есть нокаут viewModel и я подключаю JQuery для проверки. Одно из значений, code
, я хочу удаленную проверку, чтобы убедиться, что она еще не используется. Проблема в том, что в моем методе для удаленной проверки вызов self.code()
возвращает старое значение вместо нового.Нокаут и проверка jQuery Удаленный: не получает последнее значение
Мой Validate код (заметьте, я также попробовал "более прямой" метод получения значения, но безрезультатно - тот же результат):
form.validate({
rules: {
'plandetail-code': {
required: true,
remote: {
url: '/Plans/ValidatePlanCode',
type: 'POST',
data: {
id: self.id(),
code: self.code() //form.find('[name="plandetail-code"]').val()
}
}
},
'plandetail-name': "required"
}
});
Соответствующие Html:
<div class="form-group">
<label for="plandetail-code">Code</label>
<input type="text" name="plandetail-code" data-bind="textInput: code" class="form-control" />
</div>
Мой контроллер действие является простым, но учтите, что code
всегда приходит в качестве исходного значения:
[HttpPost]
public string ValidatePlanCode(int? id, string code) {
return _service.ValidatePlanCode(id, code) ? "true" : "false";
}
А вот мой ViewModel: я бегу form.Validate({})
перед применением привязок (пытался положить, что после того, как, а), и в методе saveChanges
проверить form.valid()
:
function PlanDetailVM(model) {
var self = this;
self.originalModel = model;
self.form = $('#pgPlan-plan-detail-form');
self.id = ko.observable(model.ID);
self.active = ko.observable(model.Active);
self.code = ko.observable(model.Code);
self.name = ko.observable(model.Name);
self.notes = ko.observable(model.notes);
self.dirty = ko.computed(function() { return isDirty(); });
self.save = function() { saveChanges(); }
self.cancel = function() { cancelChanges(); }
ko.applyBindings(self, document.getElementById('pgPlan-detail-container'));
initValidation(self.form);
return self;
function initValidation(form) {
form.validate({
rules: {
'plandetail-code': {
required: true,
remote: {
url: '/Plans/ValidatePlanCode',
type: 'POST',
data: {
id: self.id(),
code: self.code() //form.find('[name="plandetail-code"]').text()
}
}
},
'plandetail-name': "required"
}
});
}
function isDirty() { ... }
function saveChanges() {
if (!self.form.valid()) {
return;
}
// ajax snipped
}
function cancelChanges() { ... }
}
Repro:
- нагрузки первоначальный вид, код имеет значение, AAAA
- Изменить код для BBBB
- Соблюдайте действие контроллера под названием
- код действия контроллера param = AAAA
Я не уверен, почему я не могу получить последнее значение из ввода текста. Я что-то упускаю? Благодаря
Holy facepalm .... ok, ok ... спасибо. – jleach