【发布时间】:2018-10-15 01:09:11
【问题描述】:
我想创建一个打字稿类,它将使用淘汰赛机制完成所有绑定。第一步已经完成,但现在我被困住了。 我可以将数据绑定到我的 html,但我无法操作它们并刷新绑定。
到目前为止,我有这个:
import * as ko from "knockout";
module Data {
export class Binder {
private _observableContext = ko.observable();
constructor() { ... }
public get ObservableContext() {
return this._observableContext ;
}
public set ObservableContext(value: any) {
this._observableContext = value;
}
public bind(elementID: string) {
ko.applyBindings(this._observableContext, $("#"+elementID));
}
}
}
我是这样使用的:
Class MyPage {
private _binder: Data.Binder;
public constructor() {
this._binder.ObservableContext({
data1: MethodA,
data2: SomeObject.GetData(),
...
});
this._binder.bind("someHtmlID");
}
public MethodA = () => {
// do some operations on the binder.ObservableContext() and refresh data
}
}
我尝试了很多方法让它工作,但在修改 _binder 后我仍然无法刷新绑定。 _binder 数据已更改,但结果不会出现在屏幕上。
有什么想法吗?
【问题讨论】:
-
您想用活页夹实现什么目标?您是否只需要更改绑定器上下文中的属性值并期望 UI 更新?还是最终会变得更复杂?
-
目的是创建一个使用knockout力量的自定义框架。所以 binder 对象应该完成我的类(实际上就像 viewmodels)和 HTML 之间的所有绑定,因为没有经典的导航(导航是通过实例化类并在一个容器中加载部分 html 来完成的)
-
如果您尝试基于 knockout 构建自定义 SPA - 最好采用一些 Angular 代替))))如果您仍然想使用 knockout 做到这一点 - 从现有解决方案中选择一些好的路由器并根据您的需要进行调整。我建议根据components 制作所有内容。所以每个页面都可以是一个单独的组件,每个页面都可以使用绑定流,在my answer 中进行了描述。
-
感谢您的建议。我会看看组件,这是我的应用程序的精神,所以它肯定会有用。起初没有想到使用 Angular。现在切换到angular还为时不晚,我也去看看。谢谢!
标签: typescript knockout.js data-binding