Javascript 显示模块模式、KnockoutJS和CoffeeScript
这可能是一个非常初级的问题,或者我一次使用了太多的东西。我正在尝试使用KnockoutJS,并尝试编写CoffeeScript。我把我的模型放在一个单独的函数中。代码如下:Javascript 显示模块模式、KnockoutJS和CoffeeScript,javascript,knockout.js,Javascript,Knockout.js,这可能是一个非常初级的问题,或者我一次使用了太多的东西。我正在尝试使用KnockoutJS,并尝试编写CoffeeScript。我把我的模型放在一个单独的函数中。代码如下: myapp =(-> person =-> firstname = ko.observable "k" lastname = ko.observable "d" firstname:firstname, lastname:lastname
myapp =(->
person =->
firstname = ko.observable "k"
lastname = ko.observable "d"
firstname:firstname,
lastname:lastname
person : person
)()
$(->
ko.applyBindings(new myapp.person())
@
)
现在,在Visual Studio中使用workbench创建JavaScript,如下所示:
(function() {
var myapp;
myapp = (function() {
var person;
person = function() {
var firstname, lastname;
firstname = ko.observable("k");
lastname = ko.observable("d");
return {
firstname: firstname,
lastname: lastname
};
};
return {
person: person
};
})();
$(function() {
ko.applyBindings(new myapp.person());
return this;
});
}).call(this);
这是一个错误,它现在可以找到要绑定的元素。以下是简单的HTML文本:
<p>
Firstname<span data-bind="text: myapp.person().firstname"></span>
Lastname<span data-bind="text: myapp.person().lastname">
</span>
</p>
谁能解释一下这里出了什么问题?或者有没有其他方法来编写CoffeeScript来使用KnockoutJS
如果需要更多详细信息,请发表意见。以下是工作示例: 您需要更改绑定语法:
<p>
Firstname: <span data-bind="text:firstname"></span>
Lastname: <span data-bind="text:lastname">
</span>
</p>
名字:
姓氏:
因为当您调用ko.applyBindings(new myapp.person())时,您只为person对象而不是所有myapp对象设置视图
如果您想为整个myapp设置视图,您需要如下更改代码:
myapp=(->
person=(fname,lname)->
firstname=ko.observable fname
lastname=ko.observable lname
名字:名字,
姓氏:姓氏
人物:新人(“杰克”、“麻雀”)
)()
$(->
ko.applyBindings(myapp)
@
)
名字:
姓氏:
以下是工作示例:
您需要更改绑定语法:
<p>
Firstname: <span data-bind="text:firstname"></span>
Lastname: <span data-bind="text:lastname">
</span>
</p>
名字:
姓氏:
因为当您调用ko.applyBindings(new myapp.person())时,您只为person对象而不是所有myapp对象设置视图
如果您想为整个myapp设置视图,您需要如下更改代码:
myapp=(->
person=(fname,lname)->
firstname=ko.observable fname
lastname=ko.observable lname
名字:名字,
姓氏:姓氏
人物:新人(“杰克”、“麻雀”)
)()
$(->
ko.applyBindings(myapp)
@
)
名字:
姓氏:
它成功了。谢谢还有一个请求,请您解释一下我哪里做错了,或者绑定是如何工作的。所以,下次我会小心的。再次感谢。调用ko.appyBindings(x)很简单,您可以为视图定义一个模型(x)。这意味着您只能从数据绑定访问x属性。您在调用新的myapp.person()时创建了一个单人对象。这意味着您只能访问firstname和lastname字段。但您使用myapp.person().firstname来访问此人的姓名。您的模型中不存在myapp和person对象。我将模型设置为myapp,它有一个新创建的person对象。所以我可以先从数据绑定中访问person对象,然后访问它的字段,就像person.firstName一样。谢谢还有一个请求,请您解释一下我哪里做错了,或者绑定是如何工作的。所以,下次我会小心的。再次感谢。调用ko.appyBindings(x)很简单,您可以为视图定义一个模型(x)。这意味着您只能从数据绑定访问x属性。您在调用新的myapp.person()时创建了一个单人对象。这意味着您只能访问firstname和lastname字段。但您使用myapp.person().firstname来访问此人的姓名。您的模型中不存在myapp和person对象。我将模型设置为myapp,它有一个新创建的person对象。所以我可以先访问person对象,然后从数据绑定中访问它的字段,比如person.firstname
<p>
Firstname: <span data-bind="text:firstname"></span>
Lastname: <span data-bind="text:lastname">
</span>
</p>
myapp = (->
person = (fname,lname)->
firstname = ko.observable fname
lastname = ko.observable lname
firstname:firstname,
lastname:lastname
person : new person("Jack" , "Sparrow")
)()
$(->
ko.applyBindings(myapp)
@
)
<p>
Firstname: <span data-bind="text:person.firstname"></span>
Lastname: <span data-bind="text:person.lastname">
</span>
</p>