如何让这个简单的单向绑定与knockout一起工作
How to get this simple one-way binding with knockout to work?
我正在学习淘汰赛,这是我第一次学习,所以请温柔点。
我只想要一个从模型到文本框的单向绑定,也就是说,模型中的任何内容都必须显示在文本框中。我还不想创建可观察对象。
这是我所拥有的,但是当我运行这段代码时,文本框不包含模型值,并且控制台报告一个错误:
下面是我的代码: html 1.
TypeError: c is null
<html>
<head>
<meta charset="utf-8"/>
<script type='text/javascript' src='knockout-3.4.0.js'></script>
<script type='text/javascript' src='1.js'></script>
</head>
<form id = "frm" name = "frm">
<fieldset>
<legend>Your friend's basic information</legend>
<div>
<label for = "FirstName">First Name</label>
<input type = "text" name = "FirstName" id = "txtFirstName" data-bind = "value: friend.firstName" />
</div>
<div>
<label for = "LastName">Last Name</label>
<input type = "text" name = "LastName" id = "txtLastName" data-bind = "value: friend.lastName" />
</div>
</fieldset>
</form>
</html>
js 1. var model =
{
friend :
{
firstName : 'Sathyaish',
lastName : 'Chakravarthy'
}
};
ko.applyBindings(model);
看起来knockout不能绑定嵌套属性。因为我绑定到的属性不是model
对象的直接成员,而是嵌套在model.friend
中,所以它不能绑定它。
当然它不能是,我不能有一个层次模型,我只能绑定,如果属性是model
对象的顶层成员?
我很可能在语法上做错了什么
如果你不传递rootElement
来应用绑定,它将使用window.document.body
。但是,如果您的脚本是在head
节中加载的,那么此时body
是不可用的。所以你需要把1.js
加载到body里面,像这样:
<html>
<head>
<meta charset="utf-8"/>
<script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-debug.js'></script>
</head>
<body>
<form id = "frm" name = "frm">
<fieldset>
<legend>Your friend's basic information</legend>
<div>
<label for = "FirstName">First Name</label>
<input type = "text" name = "FirstName" id = "txtFirstName" data-bind = "value: friend.firstName" />
</div>
<div>
<label for = "LastName">Last Name</label>
<input type = "text" name = "LastName" id = "txtLastName" data-bind = "value: friend.lastName" />
</div>
</fieldset>
</form>
<script type='text/javascript' src='1.js'></script>
</body>
</html>
您将需要使用映射库来做到这一点。当您使用嵌套属性(如类)时,您需要使用映射。查看:Plugin Knockout Mapping
你的代码应该是这样的:
var viewModel = function () {
var _vm = null,
init = function () {
_vm = {
friend : ko.mapping.fromJS({
firstName : 'Sathyaish',
lastName : 'Chakravarthy'
}),
change: function(){
_vm.friend.firstName('first name changed');
}
};
ko.applyBindings(_vm, $('#frm').get(0));
}
return {
init: init
}
} ();
我一直有这种情况。我输入JSFIDDLE检查一下
相关文章:
- Knockout绑定大量数据的速度较慢
- 使用knockout.js将数组绑定到视图模型
- 如何使用Jasmine测试Knockout.js点击绑定
- Knockout绑定是膨胀的html(表单元格),如何使用javascript创建绑定或从父元素绑定
- 在Knockout中绑定数据后获取数据
- Knockout输入绑定不起作用
- knockout.js中的绑定多下拉列表
- Knockout绑定错误
- Knockout.js绑定范围
- 使用Knockout自定义绑定更新JSTree
- Knockout js 条件选项绑定
- Knockout.js在标头中绑定css/js库
- 为knockout.js数据绑定加载多个远程数据源
- knockout.js获胜't更新我的foreach绑定,尽管更改已注册
- Knockout自定义绑定不会't更新
- 在内联编辑的情况下,Knockout绑定不起作用
- 使用数据绑定(KNOCKOUT.js)加载requirejs模块
- 可以'如果'可与'foreach'在'模板'绑定Knockout
- 如何数据绑定Knockout中接受参数的方法
- 我如何枚举一个javascript对象的属性使用数据绑定Knockout.js