无法使用ASP.NET热毛巾spa模板获得ace编辑器

时间:2013-02-23 15:35:25

标签: asp.net-mvc-4 ace-editor hottowel

我是网络开发的新手,所以请怜悯:) 我用热毛巾模板(http://nuget.org/packages/HotTowel/)创建了一个新的ASP.NET项目并添加了

<script src="http://d1n0x3qji82z53.cloudfront.net/src-min-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>

到index.cshtml。另外,我修改了home.html看起来像这样:

<section>
    <div id="editor">
        function foo(items) {
            var x = "All this is syntax highlighted";
            return x;
        }
    </div>
</section>

最后,我改变了home.js:

define(['services/logger'], function (logger) {
    var vm = {
        activate: activate,
        title: 'Home View'
    };

    var editor = ace.edit("editor");
    editor.setTheme("ace/theme/monokai");
    editor.getSession().setMode("ace/mode/javascript");

    return vm;

    //#region Internal Methods
    function activate() {
        logger.log('Home View Activated', null, 'home', true);
        return true;
    }
    //#endregion
});

当我运行应用程序时,Chrome告诉我ace.js有一个Uncaught TypeError:无法读取null的属性'env'。当然,主屏幕不会出现。我该怎么做才能让它发挥作用?

2 个答案:

答案 0 :(得分:1)

在创建var editor = ace.edit("editor");之前,

看起来像<div id="editor">行,确保在<div id="editor">之后包含home.js脚本或在document.onload事件之后激活

答案 1 :(得分:0)

@Papa Mufflon我不允许评论,所以我会把它作为答案。 HotTowel使用Durandal,当页面变为活动状态时将调用activate函数(激活由vm公开)。

您可以将“激活”用作“页面加载事件”。 只需将activate函数中的return true;语句更改为return yourDefinedStartupMethod();即可。您可以查看shell.js中的boot()函数用法

此处有一个更详细的行为描述http://oscarmeszar.com/hottowel-with-breeze-example/