代码之家  ›  专栏  ›  技术社区  ›  Craig

关于在ASP.NET中使javascript对象名称唯一的想法。网?

  •  0
  • Craig  · 技术社区  · 17 年前

    我创建了一个ASP。将被多次放置在网页内的网络用户控件。在这个控件中,我定义了一个javascript对象,例如:

    function MyObject( options )
    {
      this.x = options.x;
    }
    
    MyObject.prototype.someFunction=function someFunctionF()
    {
      return this.x + 1;
    }
    

    在后面的代码中,我在启动脚本中创建了MyObject--

    var opts = { x: 99 };
    
    var myObject = new MyObject( opts );
    

    当按下控件中的某个按钮时,它将调用myObject.someFunction()。现在,假设一个控件的x值为99,而另一个控件为98。这里的问题是var myObject将被重复,只有最后一个实例才重要。当然,有一种方法可以使用我还没有遇到的一些概念来使var myObject独一无二。思想?

    谢谢,

    克雷格

    5 回复  |  直到 17 年前
        1
  •  1
  •   AnthonyWJones    17 年前

    你的Javascript是这样的:-

    function MyObject(options) { this.x = options.x; }
    MyObject.prototype.someFunction = function() { return this.x + 1; }
    MyObject.create(id, options) {
        if (!this._instances) this._instances = {};
        return this._instances[id] = new MyObject(options);
    }
    MyObject.getInstance(id) { return this._instances[id]; }
    

    你的启动javascript如下:-

    MyObject.create(ClientID, {x: 99});
    

    其他需要使用实例的代码(例如在客户端onclick事件中)

    String.Format("onclick=\"MyObject.getInstance('{0}').someFunction()\", ClientID);
    

    请注意,对客户端全局命名空间的影响很小,无论向页面添加了多少控件实例,都只会将MyObject标识符添加到全局命名空间中。

        2
  •  0
  •   tvanfosson    17 年前

    如果它只是一个值,为什么不让函数将其作为参数并构建onclick处理程序,以便为每个控件输入正确的值。如果它比这更复杂,那么考虑将选项设置为数组,并为每个控件将正确的选项插入数组中与每个特定控件对应的位置。然后将正确的索引传递到函数的数组中。

        3
  •  0
  •   BenAlabaster    17 年前

    我通过使用ScriptManager来实现这一点。RegisterClientScriptBlock在客户端将字符串注册为JavaScript块。然后,我可以使用{0}、{1}修改我的脚本字符串。.,{n}位持有者注入必要的id。这取决于代码的结构,这是否是最优雅的方式,但它在紧要关头也能工作。然后,您可以使用对Me.ClientID的引用来注入变量名。

        4
  •  0
  •   Luca Matteis    17 年前

    您可以将“x”的值设置为静态,并在代码中的任何位置访问它,例如:

    function MyObject( options ) { MyObject.x = options.x; }
    MyObject.x = 99; // static
    MyObject.prototype.someFunction = function () { return MyObject.x + 1; }
    

    通过这种方式,您可以在代码中的任何位置访问MyObject.x,甚至无需重新安装MyObject。

        5
  •  0
  •   Craig    17 年前

    出色的解决方案,安东尼。其他提供的解决方案也很好,我确实考虑过了,但我正在寻找更优雅的解决方案。 谢谢!

    推荐文章