Uncaught ReferenceError: Unable to process binding "submit: function(){return add_list_form_submit }"
Uncaught ReferenceError: Unable to process binding "submit: function(){return add_list_form_submit }"
我真的需要帮助来调试这个错误。我有一个使用 KnockoutJS 继承的项目。我们将不胜感激。
这是视图的片段
<form action="" method="post" class="text-muted" ko="submit: add_list_form_submit">
<div class="form-group">
<label class="control-label">Travel purpose</label>
<select ko="visible: purposes().length != 0,
value: selected,
attr: {name: !is_new_purpose() ? 'travel_purpose':'' }"
class="form-control"
required>
<option style="display: none" value="">Select or add purpose</option>
<!-- ko foreach: purposes -->
<option ko="value: $data, text: $data"></option>
<!-- /ko -->
<option value="__">Add a new category</option>
</select>
<input ko="visible: is_new_purpose,
value: travel_purpose,
value_update: 'input',
attr: { name: is_new_purpose()? Every 'travel_purpose':'' }"
class="form-control"
type="text"
placeholder="enter new travel purpose" />
</div>
<form>
这里是Viewmodel,设置同上一个。
function EnterTravelInfoViewmodel() {
var etm = this;
// Observables
etm.purposes = ko.observableArray();
etm.selected = ko.observable('');
etm.travel_purpose = ko.observable('');
// Subscriptions
etm.selected.subscribe(function(s) {
});
// Computed
etm.is_new_purpose = ko.computed(function() {
return etm.purposes().length == 0 || etm.selected() == '__';
});
// Event handlers
etm.add_list_form_submit = function() {
if ((!etm.is_new_purpose() && etm.selected() == '') || (etm.is_new_purpose() && etm.travel_purpose() == '')) {
swal({title: "Hold on", text: "Specify a purpose for this travel", type: 'info'});
return false;
}
return true;
};
// Init
//------------Get Travel Purposes payload------------
$.post(Me.url_prefix+'lib/bg-manage-travel.php?get_request=get-travel-purposes', {}
, function(data) {
etm.purposes( JSON.parse(data) );
});
还有其他几个视图模型通过开关循环绑定
$(function() {
switch(where) {
case 'login':
VM = new LoginViewmodel();
break;
case 'manage-production-stages':
VM = new ManageProductionStagesViewmodel();
break;
case 'enter-travel-info':
VM = new EnterTravelInfoViewmodel();
break;
}
ko.applyBindings(VM);
});
此外,请注意数据绑定已重新分配,这就是我在视图中使用“ko”的原因。
//----------Change `ko` attribs to `data-bind`-------------
$(function() {
$('[ko]').renameAttr('ko','data-bind');
});
再次感谢您。
view-model 没有绑定,因为浏览器缓存了我的历史记录。清除浏览器缓存解决了这个问题。
我真的需要帮助来调试这个错误。我有一个使用 KnockoutJS 继承的项目。我们将不胜感激。
这是视图的片段
<form action="" method="post" class="text-muted" ko="submit: add_list_form_submit">
<div class="form-group">
<label class="control-label">Travel purpose</label>
<select ko="visible: purposes().length != 0,
value: selected,
attr: {name: !is_new_purpose() ? 'travel_purpose':'' }"
class="form-control"
required>
<option style="display: none" value="">Select or add purpose</option>
<!-- ko foreach: purposes -->
<option ko="value: $data, text: $data"></option>
<!-- /ko -->
<option value="__">Add a new category</option>
</select>
<input ko="visible: is_new_purpose,
value: travel_purpose,
value_update: 'input',
attr: { name: is_new_purpose()? Every 'travel_purpose':'' }"
class="form-control"
type="text"
placeholder="enter new travel purpose" />
</div>
<form>
这里是Viewmodel,设置同上一个。
function EnterTravelInfoViewmodel() {
var etm = this;
// Observables
etm.purposes = ko.observableArray();
etm.selected = ko.observable('');
etm.travel_purpose = ko.observable('');
// Subscriptions
etm.selected.subscribe(function(s) {
});
// Computed
etm.is_new_purpose = ko.computed(function() {
return etm.purposes().length == 0 || etm.selected() == '__';
});
// Event handlers
etm.add_list_form_submit = function() {
if ((!etm.is_new_purpose() && etm.selected() == '') || (etm.is_new_purpose() && etm.travel_purpose() == '')) {
swal({title: "Hold on", text: "Specify a purpose for this travel", type: 'info'});
return false;
}
return true;
};
// Init
//------------Get Travel Purposes payload------------
$.post(Me.url_prefix+'lib/bg-manage-travel.php?get_request=get-travel-purposes', {}
, function(data) {
etm.purposes( JSON.parse(data) );
});
还有其他几个视图模型通过开关循环绑定
$(function() {
switch(where) {
case 'login':
VM = new LoginViewmodel();
break;
case 'manage-production-stages':
VM = new ManageProductionStagesViewmodel();
break;
case 'enter-travel-info':
VM = new EnterTravelInfoViewmodel();
break;
}
ko.applyBindings(VM);
});
此外,请注意数据绑定已重新分配,这就是我在视图中使用“ko”的原因。
//----------Change `ko` attribs to `data-bind`-------------
$(function() {
$('[ko]').renameAttr('ko','data-bind');
});
再次感谢您。
view-model 没有绑定,因为浏览器缓存了我的历史记录。清除浏览器缓存解决了这个问题。