Knockout.js 处理使用requireJS加载时计算的淘汰时出错

Knockout.js 处理使用requireJS加载时计算的淘汰时出错,knockout.js,Knockout.js,我正在使用KnockoutJS2.2,并试图通过将“currentPanel”设置为显示在主模板页面上来实现应用程序导航 <div id="content" data-bind="template: {name: currentPanel}"></div> 这背后的模型看起来像 app.appModel = new Backbone.Model({ panelName : 'index-template' }); // VERSION 3: Using a si

我正在使用KnockoutJS2.2,并试图通过将“currentPanel”设置为显示在主模板页面上来实现应用程序导航

<div id="content" data-bind="template: {name: currentPanel}"></div>
这背后的模型看起来像

app.appModel = new Backbone.Model({
   panelName : 'index-template'
});

// VERSION 3: Using a simple JS object
app.AppViewModel = function(model){
  this.panelName = kb.observable(model, 'panelName');

  this.currentPanel = ko.computed(function() {
     return this.panelName();
  }, this);
}
app.appViewModel = new app.AppViewModel(app.appModel);
ko.applyBindings(app.appViewModel, $('#content')[0]);
当不使用requireJS加载时,这可以很好地工作

但是-当我使用require加载脚本时

require.config({
  paths : {
     jquery : 'vendor/jquery-1.8.3.min',
     underscore : 'vendor/underscore',
     backbone : 'vendor/backbone',
     knockout : 'vendor/knockout-2.2.0.debug',
     knockback : 'vendor/knockback-0.17-2'
  }
});

define(['jquery', 'underscore', 'backbone', 'knockout', 'knockback'], function($, _, Backbone, ko, kb){

 // my code here....
});
使用AMD版本的下划线和主干[from here][1],据我所知[knockoutJS是AMD准备好了吗™][2]

我得到了在“this.currentPanel”ko.computed字段定义中出现的JS错误:

Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.
(出于某种原因,我的Firebug甚至没有在脚本窗格下显示knockout.js库以进行调试-它正在Net下加载-这不是我在使用集成到Dojo中的requireJS时的体验,但可能是我在Linux上的Firebug版本)

我还尝试了用jQuery1.9淘汰2.2.1(2.2.0与jQuery1.9不兼容,因此这里的更改)

从knockoutJS代码中可以看出,ko.computed的声明默认为只读,我试图使用read_only=false属性来解决这个问题;但这似乎没有帮助,我也不知道如何告诉ko它是可写的

但是,由于在非requireJS加载情况下不会出现此错误,因此我认为我追求的是错误的东西

在这种情况下,有人能理解这个错误吗?我是面临一些配置问题还是诚实的淘汰赛问题

---更新---

在最初的定义中有一个Knockback observable,但是如果我删除它并简单地使用一个ko.observable,比如

// VERSION 3: Using a simple JS object
app.AppViewModel = function(model){

  this.currentPanel = ko.computed(function() {
     return 'index-template';
  }, this);
}
app.appViewModel = new app.AppViewModel(app.appModel);
ko.applyBindings(app.appViewModel, $('#content')[0]);
确切的错误仍然存在

Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.

这不是打字错误,是吗?“kb”而不是“ko”??this.panelName=kb.observable(model,'panelName')
kb
是用于。我认为这个错误来自于Knockback。也许你可以从开发人员那里得到帮助。正确,kb是Knockback-我更新了这个问题,以表明在取消使用Knockback之后问题仍然存在。问题是,我无法调试这个问题,因为requireJS加载我的脚本的方式。每个页面只加载一次在Firebug脚本面板中显示require.js和另一个脚本-jquery、下划线或knockout,看起来是随机选择的。在Chrome中效果相同。即使knockout确实出现并且我设置了一个断点,下次它出现在脚本窗格中时也不受尊重。我甚至不能在抛出错误的地方使用“调试器”停止执行。U生长激素。
Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.