1

ScriptSharp 生成的 Javascript 找不到我的类方法“LoadContent()”。我哪里错了?

似乎是将方法放入原型中,但我不确定这是我需要的。任何帮助将不胜感激。

namespace Echo.Web.JScript
{
     [ScriptNamespace("Scripts")]
    public class MasterTrackerActions
     {
         private jQueryObject _source;

         public MasterTrackerActions(string fundCodeSourceId)
         {
             _source = jQuery.Select("#" + fundCodeSourceId);
             _source.Change(delegate
                 {
                     Script.Alert("Here we go"); //We see this fine.
                     LoadContent();
                 });
         }

         public void LoadContent()
         {
             Script.Alert("Do we get here?"); //Answer is no
         }
    }
}
4

1 回答 1

2

我在 0.8 中尝试过,它按预期工作(通过 AMD 模式)。我对您的代码稍作更改,使其在 0.8 中编译。

  • 将 Script.Alert 更改为 Window.Alert
  • 在 AssemblyInfo.cs 中删除了 ScriptNamespace 并添加了 [assembly: ScriptAssembly("Scripts")]

S# 类

using System.Html;
using jQueryApi;

namespace Echo.Web.JScript {
    public class MasterTrackerActions {
        private jQueryObject _source;

        public MasterTrackerActions(string fundCodeSourceId) {
            _source = jQuery.Select("#" + fundCodeSourceId);
            _source.Change(delegate {
                Window.Alert("Here we go"); //We see this fine.
                LoadContent();
            });
        }

        public void LoadContent() {
            Window.Alert("Do we get here?"); //Answer is no
        }
    }
}

生成的 JS 文件是

/*! Scripts.js 1.0.0.0
* 
*/

"use strict";

define('Scripts', ['ss', 'jquery'], function(ss, $) {
    var $global = this;

    // Echo.Web.JScript.MasterTrackerActions

    function MasterTrackerActions(fundCodeSourceId) {
    var $this = this;

    this._source = $('#' + fundCodeSourceId);
    this._source.change(function() {
          alert('Here we go');
          $this.loadContent();
      });
    }

    var MasterTrackerActions$ = {
        loadContent: function() {
           alert('Do we get here?');
        }
    };

    var $exports = ss.module('Scripts', null,
    {
      MasterTrackerActions: [ MasterTrackerActions, MasterTrackerActions$, null ]
    });

    return $exports;
});

现在要在 HTML 文件中使用它,您需要使用提供的 ModuleLoader SSLoader.js 或 RequireJS(首选)。在这种情况下,您需要带有 JQuery 的 RequireJS 模块。也有不同的方法来包含 JQuery(这超出了这里的范围)。

HTML 文件

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>

    <body>
        <script type="text/javascript" data-main="Scripts/MyScript.js" src="Scripts/require-jquery.js"></script>

        <script type="text/javascript">
            require(['MyScript'], function (ms) {
                var tracker = new ms.MasterTrackerActions('sampleText');
                console.log(tracker);
            });
        </script>

        <textarea id="sampleText">TEST123</textarea>
    </body>
</html>

哦还有一件事,当控件失去焦点时触发事件......

于 2013-04-03T15:25:44.247 回答