В проекте ASP.NET 5 с Visual Studio 2015 мы используем классы Postscript с Knockout для генерации наших файлов Javascript. Мы используем AMD и ES5. Предположим, у нас есть этот первый класс:Импортируйте модуль и используйте его в поле зрения
ActionViewModel.ts
export class ActionViewModel {
public Id: KnockoutObservable<number>;
...
}
И еще один класс, который реализует ActionViewModel в другом файле машинопись.
action.ts
import { ActionViewModel } from 'ActionViewModel';
class ActionVM extends ActionViewModel {
...
}
class ActionViewModelManager {
private actionViewModel: ActionVM;
...
}
ActionViewModelManager используется для управления ViewModel. Мы загружаем первый ViewModel с помощью ключевого слова import.
Проблема
Javascript файл, созданный использовать определить() метод для загрузки файла 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 не доступен: это под сферу метода обратного вызова о определить метод. Поэтому мой вопрос: как мы можем использовать класс, объявленный в файле, где мы импортируем другой класс?
Edit: все 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, который вы можете поделиться и/или изменить свой результат? – WhiteHat
Спасибо за ваш ответ, см. В редакции –
этой помощи _might_. Вы должны знать, к чему относится этот термин, какой-то родительский класс или пространство имен. если бы вы знали, что можете использовать 'namesp.AVM' и т. д. Или после ответа здесь вы можете быть уверены. http://stackoverflow.com/questions/16595220/extends-in-javascript – WhiteHat