【问题标题】:Knockout+Webpack - loading modulesKnockout+Webpack - 加载模块
【发布时间】:2017-12-04 14:16:10
【问题描述】:

我正在使用带有 TypeScript 视图模型和 WebPack 的 knockoutJs 来捆绑所有内容。

在我开始使用模块和 webpack 之前,我能够编写如下内容:

<p data-bind="text: moment().format('L')">

但知道我收到此错误:消息:未定义时刻

如果我在视图模型中使用矩(即:通过将其分配给变量),它会起作用。

viewmodel.ts:

import * as ko from 'knockout';
import * as moment from 'moment';

class TestViewModel {  
    test = moment().format('L'); 
}

ko.applyBindings(new TestViewModel(), document.getElementById('mainbinding'));

查看(cshtml部分页面)

<pre data-bind="text: test"></pre> <!-- this works -->
<pre data-bind="text:moment().format('L')"></pre> <!-- this does not work-->

我错过了什么?

【问题讨论】:

  • 这可能无法完全解决您的问题,但它应该是import moment from 'moment',否则moment 将是一个对象而不是一个函数。我没有同时使用 webpack 和淘汰赛,所以我不确定是否也应该改变。不幸的是,我不确定为什么 moment 未定义。

标签: typescript knockout.js webpack momentjs


【解决方案1】:

您的视图只能访问您的 viewModel 的“公共”属性。 当您在代码中导入/需要时刻时 - 它就像文件中的局部变量。 要解决您的问题,请将 moment 分配给 viewModel 变量:

import * as ko from 'knockout';
import moment from "moment";

class TestViewModel {
    moment: any = moment;
}

ko.applyBindings(new TestViewModel(), document.getElementById('mainbinding'));

但是我建议您创建custom binding。你可以从这里获得灵感 - https://gist.github.com/tommck/6174395

【讨论】:

  • 谢谢@mykhailo.romaniuk!我还在纠结“模块”和“导入”,但你的回答完全有道理! PS:我已经在使用自定义绑定了,除了这样的小东西
猜你喜欢
  • 2016-02-26
  • 2018-04-04
  • 2021-01-13
  • 2018-06-05
  • 2016-01-26
  • 1970-01-01
  • 2015-10-09
  • 2020-09-22
相关资源
最近更新 更多