【发布时间】:2015-08-06 09:22:44
【问题描述】:
在一个带有 Visual Studio 2015 的 ASP.NET 5 项目中,我们使用带有 Knockout 的 Typescript 类来生成我们的 Javascript 文件。我们使用 AMD 和 ES5。 假设我们有这个头等舱:
ActionViewModel.ts
export class ActionViewModel {
public Id: KnockoutObservable<number>;
...
}
还有另一个在另一个 Typescript 文件中实现 ActionViewModel 的类。
action.ts
import { ActionViewModel } from 'ActionViewModel';
class ActionVM extends ActionViewModel {
...
}
class ActionViewModelManager {
private actionViewModel: ActionVM;
...
}
ActionViewModelManager 用于管理 ViewModel。由于 import 关键字,我们加载了第一个 ViewModel。
问题
生成的 Javascript 文件使用 define() 方法加载 ActionViewModel.ts 文件。
define(["require", "exports", 'ActionViewModel'], function (require, exports, ActionViewModel) {
var ActionVM = (function (_super) {
}
var ActionViewModelManager = (function () {
function ActionViewModelManager(withValidationRules) {
this.actionViewModel = new ActionVM();
ko.applyBindings(this.actionViewModel);
}
...
}
});
但是如果我想在视图中使用我的 ActionViewModelManager (Index.cshtml)
<script>
$(function () {
var actionViewModelManager = new ActionViewModelManager();
});
</script>
我不能,因为它说 ActionViewModelManager 不可用:它在 define 方法的回调方法范围内。所以我的问题是:我们如何使用在导入另一个类的文件中声明的类?
编辑:所有 JS 生成
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
define(["require", "exports", 'ActionViewModel'], function (require, exports, ActionViewModel) {
var ActionVM = (function (_super) {
__extends(ActionVM, _super);
function ActionVM() {
var _this = this;
_super.call(this);
this.clientSelected = function (args, handler) {
...
};
this.offreSelected = function (args, handler) {
...
};
this.submitAction = function (formElement) {
...
};
}
return ActionVM;
})(ActionViewModel);
var ActionViewModelManager = (function () {
function ActionViewModelManager(withValidationRules) {
this.actionViewModel = new ActionVM();
ko.applyBindings(this.actionViewModel);
}
ActionViewModelManager.prototype.SetId = function (valeur) { this.actionViewModel.Id(valeur); };
ActionViewModelManager.prototype.SetDescription = function (valeur) { this.actionViewModel.Description(valeur); };
return ActionViewModelManager;
})();
});
我减少了文件的内容以提高可读性。
【问题讨论】:
-
您可以分享生成的 Javascript 和/或更改输出吗?
-
感谢您的回复,查看编辑
-
这可能有帮助。您需要知道
this指的是什么,某个父类或命名空间。如果您知道可以使用namesp.AVM等。或者按照此处的答案可能会让您不确定。 stackoverflow.com/questions/16595220/extends-in-javascript -
事实是我想在define()方法之外使用ActionViewModelManager变量,但是文件是生成的,所以我必须从Typescript文件中实现。