javascript - 使用 Knockout.js 将 Canvas 绑定(bind)到 UI

标签 javascript html canvas knockout.js

var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.fillStyle = "#FF0000";
ctx.fillRect(10, 10, 100, 100);
function ViewModel(){
			    self = this;
				self.myCanvas = ko.observable();
};
var vm = new ViewModel();
ko.applyBindings(vm);
<canvas id="myCanvas" width="300" height="150" style="border:1px solid #000000;" data-bind="___:myCanvas"></canvas>

Report
<div data-bind="___:myCanvas"></div>

我正在使用 knockout.js 将 ViewModel 属性绑定(bind)到 DOM。现在,我的 GUI 的一部分呈现在 Canvas 元素上。我使用 JavaScript 在 Canvas 上绘制元素。我无法使用 knockout 来绑定(bind)它们。

最佳答案

您可以创建一个 custom binding 在应用数据绑定(bind)时帮助存储对元素的引用。

自定义绑定(bind)具有 initupdate 方法,这两个方法都接收绑定(bind)的 HTMLElement 作为第一个参数。

下面是一个示例:

  • 定义一个自定义绑定(bind),将元素存储在 View 模型的可观察对象中
  • 订阅元素的可观察值以执行绘图逻辑

ko.bindingHandlers.storeElement = {
  init: function(element, valueAccessor) {
    valueAccessor()(element);
  }
}


function ViewModel() {
  self = this;
  self.myCanvas = ko.observable();

  self.myCanvas.subscribe(function initCanvas(element) {
    var ctx = element.getContext("2d");
    ctx.fillStyle = "#FF0000";
    ctx.fillRect(10, 10, 100, 100);

  });

};

var vm = new ViewModel();
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<canvas id="myCanvas" width="300" height="150" style="border:1px solid #000000;" data-bind="storeElement: myCanvas"></canvas>

Report

关于javascript - 使用 Knockout.js 将 Canvas 绑定(bind)到 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40582916/

相关文章:

javascript - JQuery 在 Chrome 中无法运行,但在 Firefox 中可以正常运行

javascript - 通过WebDriver在C#中执行Javascript文件

javascript - 无法读取 addname 处 null 的属性 'value'

javascript - 滚动时固定但停在页脚

html - 修改属性 vec2 变量

javascript - 更改背景颜色,在 Three.js 中添加点光源

javascript - 如何区分登录和注册收到的 fireauth 登录回调

javascript - 使用过滤表对第一个 td 执行异常

html - Fieldset 元素的垂直对齐

javascript - 如何在 JQuery 或 Javascript 中创建模糊橡皮擦和模糊绘图效果?