Javascript 未定义敲除变量

Javascript 未定义敲除变量,javascript,knockout.js,observable,Javascript,Knockout.js,Observable,我对Knockout.js相对来说是新手,我很难让这个计算出的可观察的工作。简而言之,我想禁用一个按钮,直到文本区域有输入。以下是HTML: 对于文本区域: <textarea class="form-control" id="Note" name="note" data-bind="value:text1, valueUpdate: 'keyup'" placeholder="Enter note..."></textarea> 在firebug中运行时,我从控制台收

我对Knockout.js相对来说是新手,我很难让这个计算出的可观察的工作。简而言之,我想禁用一个按钮,直到文本区域有输入。以下是HTML:

对于文本区域:

<textarea class="form-control" id="Note" name="note" data-bind="value:text1, valueUpdate: 'keyup'" placeholder="Enter note..."></textarea>
在firebug中运行时,我从控制台收到一个错误,内容如下:

ReferenceError:未定义text1

我应该补充一点,我正在引用这个小提琴来创建我的代码:


编辑:按钮的click:addNote部分用于其他内容。我忘了在这段代码中删除它,因为addNote功能运行得很好。我为这一混乱道歉,并感谢大家注意到这一点。因此,T.J.似乎已经回答了我的问题。我发现ViewModel中的绑定工作不正常,绑定导致冲突。

我想您看到的是一条旧的错误消息。问题中显示的VM的问题是,您没有在任何地方定义addNote,但您正在尝试将click绑定到它

如果添加它并使btn元素成为实际按钮,则一切正常:

var vm={ 文本1:ko.observable, }; vm.hasInput=ko.computedfunction{ 返回此文件。text1; },vm;
vm.addNote=函数{};//这很奇怪,我希望您会收到关于addNote的投诉,它存在于绑定中,但不存在于VM中,也不存在于hasInput中。您的ko.computed是正确的,尽管我更喜欢ko的新语法。您的代码看起来很好,josh,但我似乎注意到的唯一一件事是您还没有在vm中定义click:note。检查一下,这里工作很酷。谢谢你的帮助,T.J.我想是这样的。我在按钮上有另一个绑定,它将数据从输入传递到其他对象。这一切都很好,但当我尝试添加更多内容时,却出现了冲突。我对虚拟机进行了一点重构,看起来一切都很好。谢谢你的帮助!另外,下次我会记住MCVE。@JoshSalazar:很高兴这有帮助。我误解了你最初链接到小提琴的原因,但我现在明白了。@JoshSalazar:刚才添加了一个关于ko.computed的注释,只是FWIW。最好的,谢谢。这很有帮助。我将致力于实现这个方法。我在应用程序的其他地方使用过这个,我不知道为什么我没有在这里使用它。我想我以前不明白其中的区别。再次感谢!
<btn class="btn btn-maroon" id="saveNote" href="javascript: void(0);" data-bind="enable: hasInput, click: addNoteis"><i class="icon-save"></i>Save Note</btn>
    var vm = {
        text1: ko.observable(""),
    }

    vm.hasInput = ko.computed(function() {
        return this.text1();
    }, vm);

    ko.applyBindings(vm);