Knockoutjs 绑定对象问题
Knockoutjs binding objects issue
我正在研究knockoutjs并遇到了一些问题。我有一个 ASP.NET MVC 页面,其方法返回三个 Car 对象的列表是 JSON。我比在HTML视图中将其映射到select
,并且我想在选择更改时显示所选汽车的成本。问题在于,汽车的名称是可见的,而价格却不可见("梅赛德斯-奔驰成本"。可能是什么?提前感谢!控制器:
public class Car
{
public string Make { get; set; }
public decimal Price { get; set; }
}
public JsonResult GetCars()
{
List<Car> cars = new List<Car>();
cars.Add(new Car { Make = "Mercedes-Benz", Price = 103000 });
cars.Add(new Car { Make = "Toyota", Price = 37000 });
cars.Add(new Car { Make = "Huyndai", Price = 17000 });
return Json(cars, JsonRequestBehavior.AllowGet);
}
并使用 JavaScript 代码查看:
<head>
<script type="text/javascript" src="~/Scripts/jquery-2.0.3.min.js"></script>
<script type="text/javascript" src="~/Scripts/knockout-3.0.0.js"></script>
<script type="text/javascript">
$(document).ready(function () {
function Car(data) {
this.Make = ko.observable(data.Make);
this.Price = ko.observable(data.Price);
}
function CarsViewModel() {
var self = this;
//Data
self.someOptions = ko.observableArray([]);
self.myOption = ko.observable();
//Operations
self.initData = function () {
$.get('/Home/GetCars', function (data) {
var mappedCars = $.map(data, function (item) { return new Car(item) });
self.someOptions(mappedCars);
});
}
}
ko.applyBindings(new CarsViewModel());
});
</script>
</head>
<body>
<div>
<button data-bind="click: initData">Load data</button>
<h4>Preview</h4>
<p>
<select data-bind="options: someOptions, optionsText: 'Make', value: myOption"></select><br />
A <span data-bind="text: myOption().Make"></span> costs <span data-bind="text: myOption().Price"></span>.
</p>
</div>
</body>
如果您检查浏览器的 JavaScript 控制台,您应该会看到以下错误:
未捕获的类型错误: 无法处理绑定"文本: 函数 (){return myOption()。make }"消息:无法读取属性"make" 定义
您收到此错误是因为加载页面时,myOption
为空,因此它没有Make
和Price
属性。因此,KO无法执行绑定data-bind="text: myOption().Make"
并且随着进一步绑定的处理而停止。
调用initData
后,您现在myOption
了一些东西,但data-bind="text: myOption().Make"
后的所有绑定仍然不再起作用。
要解决此问题,有多种方法,例如:
- 在 myOption 中使用默认值
- 使用
data-bind="text: myOption() && myOption().Make"
检查绑定中的空值 - 或使用
with
绑定
下面是with
绑定的示例:
<!-- ko with: myOption -->
A <span data-bind="text: Make"></span>
costs <span data-bind="text: Price"></span>.
<!-- /ko -->
演示 JSFiddle。
相关文章:
- JavaScript代码问题:我正在将对象转换为数组
- jquery$(this)对象缺少问题
- JavaScript对象继承问题
- 在对象中添加方法时出现问题
- 基本对象/原型语法问题
- Javascript对象文字,POST问题
- 使用Javascript对象为具有两个背景图像的DIV设置样式时出现问题
- 使用.map解析JSON对象时出现问题
- 类中对象的奇怪问题(John Resig简单继承)
- 访问Javascript对象-Node.js的作用域问题
- JavaScript对象中存在数组的问题
- 递归Javascript对象是否会导致任何问题(内存泄漏)
- JavaScript—父类和子类/对象的此问题
- 我该如何解决这个问题;参考网格”;在JavaScript中完成的对象数
- jQuery拖动到相对位置的可排序列表中时出现可拖动辅助对象位置问题
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- 创建jQuery对象时出现问题
- 面向对象,控制器问题,初学者Javascript
- 从 JSON 对象获取数据时出现问题
- Rails的问题,haml + javascript在字段对象的模糊