Javascript 敲除控制台日志和可观察未定义

Javascript 敲除控制台日志和可观察未定义,javascript,knockout.js,Javascript,Knockout.js,我已经看到了控制台日志记录的评论,但它似乎对我不起作用。此外,我的应用程序启动时没有使用我预期的默认变量。 这两个问题放在一起是因为我怀疑它们有某种联系 HTML 但是变量/方法当前的_小部件确实没有定义。KnockoutJS不生成gloabal变量 如果要访问viewModel之外的viewModel数据,则需要将其存储在变量、窗口等的某个位置 var-cdta={}; $document.readyfunction{ //... 功能应用程序{ //... } window.app

我已经看到了控制台日志记录的评论,但它似乎对我不起作用。此外,我的应用程序启动时没有使用我预期的默认变量。 这两个问题放在一起是因为我怀疑它们有某种联系

HTML

但是变量/方法当前的_小部件确实没有定义。KnockoutJS不生成gloabal变量

如果要访问viewModel之外的viewModel数据,则需要将其存储在变量、窗口等的某个位置

var-cdta={}; $document.readyfunction{ //... 功能应用程序{ //... } window.app=新应用; ko.applyBindingswindow.app; 警报“应用绑定后当前小部件的名称:” +window.app.current_widget.name; //期待福 }; 但是变量/方法当前的_小部件确实没有定义。KnockoutJS不生成gloabal变量

如果要访问viewModel之外的viewModel数据,则需要将其存储在变量、窗口等的某个位置

var-cdta={}; $document.readyfunction{ //... 功能应用程序{ //... } window.app=新应用; ko.applyBindingswindow.app; 警报“应用绑定后当前小部件的名称:” +window.app.current_widget.name; //期待福 };
代码中有几个问题

当前的_小部件是app的一个属性,所以您需要这样做

var app = new app();
ko.applyBindings(app);
alert('after applying bindings name of current widget: ' + app.current_widget().name);
因为您使用的是value和optionsCaption-Biddings,所以默认情况下,knockout会将绑定到value的observable设置为undefined。如果删除选项标题绑定,它将起作用。如果需要Options Caption并需要选择initial value,则必须在应用绑定后重置它:

var app = new app();
ko.applyBindings(app);
app.current_widget(cdta.widgets_data[0]); //you have to select an object from the array, not a completely unrelated object cdta.local.current_widget
alert('after applying bindings name of current widget: ' + app.current_widget().name);
更新: 我在2号上错了。应用绑定后不必重置值。真正的问题是使用完全不相关的对象(而不是数组中的对象)作为初始值。这将解决以下问题:

cdta.local.current_widget = cdta.widgets_data[0];

代码中有几个问题

当前的_小部件是app的一个属性,所以您需要这样做

var app = new app();
ko.applyBindings(app);
alert('after applying bindings name of current widget: ' + app.current_widget().name);
因为您使用的是value和optionsCaption-Biddings,所以默认情况下,knockout会将绑定到value的observable设置为undefined。如果删除选项标题绑定,它将起作用。如果需要Options Caption并需要选择initial value,则必须在应用绑定后重置它:

var app = new app();
ko.applyBindings(app);
app.current_widget(cdta.widgets_data[0]); //you have to select an object from the array, not a completely unrelated object cdta.local.current_widget
alert('after applying bindings name of current widget: ' + app.current_widget().name);
更新: 我在2号上错了。应用绑定后不必重置值。真正的问题是使用完全不相关的对象(而不是数组中的对象)作为初始值。这将解决以下问题:

cdta.local.current_widget = cdta.widgets_data[0];

@AlfeG感谢您解决了这个变量issue@Roman巴塔耶夫还感谢关于选项说明的第2部分-这是一个真正的问题gotcha@AlfeG谢谢,解决了这个变量issue@Roman巴塔耶夫还感谢关于选项说明的第2部分-这是一个真正的问题