【发布时间】:2011-09-24 23:50:38
【问题描述】:
我刚刚开始使用 Knockout,并且正在学习教程。虽然它在 IE 上就像一个魅力,但在任何其他浏览器上似乎都没有,我看不出我做错了什么。
这是页面标记
<!DOCTYPE html>
<html>
<head>
<title></title>
<link href="/Content/Site.css" rel="stylesheet" type="text/css" />
<link href="/Content/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table>
<tbody>
<tr>
<td><label for="Text">Text</label></td>
<td>
<input type="text" id="Text" name="Text" data-bind="text:Text"/>
</td>
</tr>
</tbody>
</table>
</body>
</html>
<script src="/Scripts/jquery-1.5.min.js" type="text/javascript"></script>
<script src="/Scripts/knockout-1.2.0.js" type="text/javascript"></script>
<script src="/Scripts/knockout.mapping.js" type="text/javascript" ></script>
<script type="text/javascript">
var model = {"Text":"Test Text"};
ko.applyBindings(model);
</script>
非常感谢您的帮助
更新
发现了我的错误,这很简单。我不会删除这个问题,以防其他人遇到这个问题。 问题又是IE!并且它似乎在 IE 中工作的事实使它看起来好像其他人有错,而事实上,IE 在解释绑定表达式方面有点松懈。
一行
<input type="text" id="Details_CompanyName" name="Details.CompanyName" data-bind="text:Details.CompanyName"/>
...应该是
<input type="text" id="Details_CompanyName" name="Details.CompanyName" data-bind="value:Details.CompanyName"/>
【问题讨论】:
-
稍微偏离主题:您确实意识到使用
var model = {"Text":"Test Text"};您只是在进行单向绑定。为确保输入中的任何更改都保存回model.Text,您必须使用var model = {"Text":ko.observable("Test Text")}; -
我发现如果某些东西在 IE 而不是 Firefox/Chrome 中“有效”,那么 10 次中有 9 次在您的 HTML/JS 中存在问题。 IE 正在掩盖你的错误。其他“基于更多标准”的浏览器按预期抛出错误。
-
您应该将您的解决方案发布为答案并标记为已接受。
-
我希望其他浏览器会抛出某种错误,我遇到了这个问题,我不知道它可能是什么。
标签: mvvm knockout.js