相关疑难解决方法(0)

如何在JavaScript中实现DOM数据绑定

请将此问题视为严格教育.我仍然有兴趣听到新的答案和想法来实现这一点

TL;博士

我如何使用JavaScript实现双向数据绑定?

数据绑定到DOM

通过数据绑定到DOM,我的意思是,例如,拥有一个a带有属性的JavaScript对象b.然后有一个<input>DOM元素(例如),当DOM元素改变时,a改变,反之亦然(也就是说,我的意思是双向数据绑定).

以下是AngularJS的示意图:

双向数据绑定

所以基本上我有类似的JavaScript:

var a = {b:3};
Run Code Online (Sandbox Code Playgroud)

然后输入(或其他形式)元素,如:

<input type='text' value=''>
Run Code Online (Sandbox Code Playgroud)

我希望输入的值是a.b值(例如),当输入文本发生变化时,我也想a.b改变.当a.bJavaScript发生变化时,输入会发生变化.

问题

在纯JavaScript中完成此操作的基本技术有哪些?

具体来说,我想要一个很好的答案来参考:

  • 如何绑定对象的工作?
  • 如何听取表格中的变化可能有效?
  • 是否有可能以简单的方式仅在模板级别修改HTML?我想不跟踪HTML文档本身的绑定,而只是跟踪JavaScript(使用DOM事件,并且JavaScript保持对所使用的DOM元素的引用).

我试过了什么?

我是Mustache的忠实粉丝,所以我尝试用它来模板化.但是,当我尝试执行数据绑定本身时遇到了问题,因为Mustache将HTML作为字符串处理,因此在得到结果之后,我没有引用viewmodel中对象的位置.我能想到的唯一解决方法是使用属性修改HTML字符串(或创建DOM树)本身.我不介意使用不同的模板引擎.

基本上,我有一种强烈的感觉,我正在使手头的问题变得复杂,并且有一个简单的解决方案.

注意:请不要提供使用外部库的答案,尤其是那些包含数千行代码的库.我已经使用了(并且喜欢!)AngularJS和KnockoutJS.我真的不想要"使用框架x"形式的答案.最理想的是,我希望未来的读者不知道如何使用许多框架来掌握如何自己实现双向数据绑定.我不希望得到一个完整的答案,而是一个能够理解这个想法的答案.

html javascript data-binding dom

234
推荐指数
10
解决办法
13万
查看次数

单击按钮或使用VBA执行JavaScript功能

我正在尝试让我的VBA例程与使用JavaScript的页面进行交互,并且过去已经成功.最近更新后,它不再有效.此时我需要A)以编程方式单击按钮或B)执行按钮调用的功能.棘手的部分是按钮没有声明的名称.在源代码中声明的工作表上还有其他名称,我可以很好地与它们进行交互.这是页面源代码中的html代码:

<input type="button" class="buttonForm" value='Run Report' onclick="exportData(workOrderSearchForm)"/>
Run Code Online (Sandbox Code Playgroud)

如您所见,它没有声明按钮的名称.在过去,以下工作:

Set ie = CreateObject("InternetExplorer.application")
ie.document.all(79).Click
Run Code Online (Sandbox Code Playgroud)

"79"是项目编号的索引.现在看来该按钮已更改为项目"81",但只是放入:

ie.document.all(81).Click
Run Code Online (Sandbox Code Playgroud)

由于某种原因不起作用.我知道我想要执行的函数:exportData(workOrderSearchForm),但不知道如何在使用"click"方法之外执行此操作.

我已经找了一些关于IE应用程序对象的体面文档,但似乎无法找到一个好的来源.有没有办法执行该功能?

javascript excel vba excel-vba

3
推荐指数
1
解决办法
5万
查看次数

程序化更改不会反映在knockout viewmodel中

使用javascript更改复选框的状态不符合MVVM的精神.但我正在创建一个通用的JavaScript库,以便更好地查看标准控件,如复选框,单选按钮或选择框.基于以下viewmodel:

function MyViewModel() {
  var self = this;

  self.ok = ko.observable();

};

var vm = new MyViewModel();
ko.applyBindings(vm);
Run Code Online (Sandbox Code Playgroud)

但是当我以编程方式更改复选框的选中状态时,我遇到了与淘汰相关的问题:

document.getElementById('chk').checked = true
Run Code Online (Sandbox Code Playgroud)

更改不会出现在viewmodel的属性中.但是当我点击复选框时一切正常.

看看http://jsfiddle.net/KWdZB/1/

有没有解决方法?

mvvm knockout.js

3
推荐指数
1
解决办法
1335
查看次数

标签 统计

javascript ×2

data-binding ×1

dom ×1

excel ×1

excel-vba ×1

html ×1

knockout.js ×1

mvvm ×1

vba ×1