- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个具有多个属性的 javascript 对象。该对象还包含一个实例方法,该方法返回对该对象的两个属性的计算结果。
我正在使用新的 Jquery .link() 插件 (http://api.jquery.com/link/),用对象属性值更新 UI 和表单元素,反之亦然,只要表单或对象已更新。
除了其中一个表单元素外,这一切都有效,它应该包含对象实例方法的结果,但永远不会更新。
我在表单上放了一个按钮来手动检查差异的值,这很有效,但是 jquery 链接插件不会自动填充输入元素,尽管它会填充链接到对象属性的输入元素。所有元素都有一个 id 和 name 属性。
谁能告诉我哪里出错了?
我的javascript:
<script>
function Product() {
this.InStock = 0;
this.Ordered = 0;
}
// object's instance method
Product.prototype.Discrepancy = ComputeDiscrepancy;
function ComputeDiscrepancy() {
return this.InStock - this.Ordered;
}
$(document).ready(function () {
var products = new Array();
products[0] = new Product();
products[1] = new Product();
$("form").link(products[0], {
InStock: "product0_InStock",
Ordered: "product0_Ordered",
Discrepancy: "product0_Discrepancy"
});
$("form").link(products[1], {
InStock: "product1_InStock",
Ordered: "product1_Ordered",
Discrepancy: "product1_Discrepancy"
});
// button for me to manually check discrepancy method works
$("#checkData").click(function () {
alert(products[0].InStock);
$("#product0_Discrepancy").val(products[0].Discrepancy());
});
}); </script>
HTML:
<table>
<tr>
<th></th><th>Product 1</th><th>Product 2</th>
</tr>
<tr>
<td> In Stock</td>
<td><input id="product0_InStock" name="product0_InStock"/></td>
<td><input id="product1_InStock" name="product1_InStock"/></td>
</tr>
<tr>
<td>Ordered</td>
<td><input id="product0_Ordered" name="product0_Ordered"/></td>
<td><input id="product1_Ordered" name="product1_Ordered"/></td>
</tr>
<tr>
<td>Discrepancy</td>
<td><input id="product0_Discrepancy" name="product0_Discrepancy"/></td>
<td><input id="product1_Discrepancy" name="product1_Discrepancy"/></td>
</tr>
</table>
最佳答案
问题在于 Discrepancy 是 Product 对象的一种方法,而不是属性。您不能将 DOM 元素链接到方法,只能链接到属性。
我解决这个问题的方法是 (a) 使 Discrepancy 成为一个属性,并且 (b) 使用 convert 和 convertBack 方法来确保正确更新这个新属性。
这是我的脚本 block :
function Product() {
this.InStock = 0;
this.Ordered = 0;
this.Discrepancy = 0;
}
var products = [];
$(document).ready(function () {
products[0] = new Product();
products[1] = new Product();
var calcDiscrepancy = function(value, source, target) {
$(target).data("Discrepancy", target.InStock - target.Ordered);
return value;
};
var changeInStock = function (value, source, target) {
target.InStock = value;
return calcDiscrepancy(value, source, target) ;
};
var changeOrdered = function (value, source, target) {
target.Ordered = value;
return calcDiscrepancy(value, source, target) ;
};
var showDiscrepancy = function(value, source, target) {
$(target).text(value.toString());
};
$("form").link(products[0], {
InStock: {
name: "product0_InStock",
convert: changeInStock
},
Ordered: {
name: "product0_Ordered",
convert: changeOrdered
},
Discrepancy: {
name: "product0_Discrepancy",
convertBack: showDiscrepancy
}
});
$("form").link(products[1], {
InStock: {
name: "product1_InStock",
convert: changeInStock
},
Ordered: {
name: "product1_Ordered",
convert: changeOrdered
},
Discrepancy: {
name: "product1_Discrepancy",
convertBack: showDiscrepancy
}
});
});
通过它:
将 Discrepancy
属性添加到 Product
类,默认值为 0。丢弃 ComputeDiscrepancy 内容。
编写几个函数来记录 InStock
和 Ordered
中的变化。这些将更新目标对象的相关属性,然后调用名为 calcDiscrepancy
的函数并返回其返回值。
calcDiscrepancy
会将值更新为目标对象的 Discrepancy
属性。为确保此更改触发所有事件,我使用了 jQuery 的 .data()
方法。
编写一个 showDiscrepancy
方法,用传入的值更新目标的内容(目标将成为 DOM 元素)。我还将“差异”元素更改为而不是文本框:否则没有任何意义。
对 link()
的调用现在将相关的 DOM 元素映射到相关的属性,并为每个元素指定转换器。对于 InStock 属性,转换器是一个转换类型并调用 changeInStock
等。对于 Discrepancy 属性,转换器是一个调用 showDiscrepancy
的 convertBack 类型。 (本质上,convert
从 DOM 元素到对象属性,而 convertBack
从属性到元素。)
关于javascript - jQuery Datalink 不使用对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3944453/
我有一个具有多个属性的 javascript 对象。该对象还包含一个实例方法,该方法返回对该对象的两个属性的计算结果。 我正在使用新的 Jquery .link() 插件 (http://api.jq
我正在试用 jQuery Data linking proposal from Microsoft 并注意到一些奇怪的事情。 我的对象获得了这个额外的属性,我想知道这是什么原因。我起初以为这是我犯的一
如何计算变量 FIC02 过去 4 小时的平均值在单元格的日期DATE ? 见下文: 日期 FIC02 08 年 1 月 8 日 06:30:00 ? 08-1-08 13:30:00 ? 08-1-
本文整理了Java中com.ucar.datalink.common.zookeeper.ZkClientX类的一些代码示例,展示了ZkClientX类的具体用法。这些代码示例主要来源于Github/
本文整理了Java中com.ucar.datalink.common.zookeeper.ZkConfig类的一些代码示例,展示了ZkConfig类的具体用法。这些代码示例主要来源于Github/St
有人知道 jQuery.tmpl 和 Data Link 什么时候会推出测试版吗?有很多人说它将成为 1.5 核心的一部分。这些“官方”插件死了吗? 最佳答案 jquery.tmpl 已被弃用,不会以
我知道有几个问题与这个问题类似,但不知何故我无法让它工作,我一直在四处寻找解决方案,但不幸的是我找不到任何解决方案: 情况:我有一个在 CodeIgniter 框架中构建的 Web 应用程序,目前它可
本文整理了Java中com.ucar.datalink.domain.media.parameter.zk.ZkMediaSrcParameter类的一些代码示例,展示了ZkMediaSrcParam
本文整理了Java中com.ucar.datalink.common.zookeeper.ZkClientX.unsubscribeStateChanges()方法的一些代码示例,展示了ZkClien
本文整理了Java中com.ucar.datalink.common.zookeeper.ZkClientX.readData()方法的一些代码示例,展示了ZkClientX.readData()的具
本文整理了Java中com.ucar.datalink.common.zookeeper.ZkClientX.retryUntilConnected()方法的一些代码示例,展示了ZkClientX.r
本文整理了Java中com.ucar.datalink.common.zookeeper.ZkClientX.getChildren()方法的一些代码示例,展示了ZkClientX.getChildr
本文整理了Java中com.ucar.datalink.common.zookeeper.ZkClientX.getZkClient()方法的一些代码示例,展示了ZkClientX.getZkClie
本文整理了Java中com.ucar.datalink.common.zookeeper.ZkClientX.delete()方法的一些代码示例,展示了ZkClientX.delete()的具体用法。
本文整理了Java中com.ucar.datalink.common.zookeeper.ZkClientX.createPersistent()方法的一些代码示例,展示了ZkClientX.crea
本文整理了Java中com.ucar.datalink.common.zookeeper.ZkClientX.subscribeStateChanges()方法的一些代码示例,展示了ZkClientX
本文整理了Java中com.ucar.datalink.common.zookeeper.ZkClientX.create()方法的一些代码示例,展示了ZkClientX.create()的具体用法。
本文整理了Java中com.ucar.datalink.common.zookeeper.ZkConfig.()方法的一些代码示例,展示了ZkConfig.()的具体用法。这些代码示例主要来源于Git
是否可以同时使用 Backbone.js 和 jquery.datalink.js 将 Backbone 模型链接到一组字段,如果可以,如何链接? 例如,给定: Name: 和 var
我想在 Rails 3.2 中使用 DATALINK 类型 ( https://wiki.postgresql.org/wiki/DATALINK ),但它不受支持。 使用这个迁移文件: def up
我是一名优秀的程序员,十分优秀!