【问题标题】:create class instance from class name as string and pass in argument从类名作为字符串创建类实例并传入参数
【发布时间】:2015-06-27 09:48:42
【问题描述】:

从一个字符串我试图实例化一个类(我的木偶观点)。我找到了一种可行的方法,但是这种方法存在一个问题,即我实际上无法将参数传递给实例化的类。 似乎当我打电话给typeMapping[viewType] 时,它实际上是在回复我Show.OneNode() 而不仅仅是Show.OneNode

  class Show.TwoNode extends App.ItemView
    template: "templates/two"
  class Show.OneNode extends App.ItemView
    template: "templates/one"

  class Show.Layout extends App.Layout
    onShow: =>
         typeMapping = {
           one: Show.OneNode
           two: Show.TwoNode
         }
         viewType = "one"      
         view = new typeMapping[viewType]
           model: @model

【问题讨论】:

    标签: coffeescript marionette


    【解决方案1】:

    再次,我宁愿发表评论,但这就是生活。您是否尝试过将键/值对中的值用引号括起来以强制它们作为字符串?

    typeMapping = {
      one: "Show.OneNode",
      two: "Show.TwoNode"
    }
    

    【讨论】:

    • 如果我这样做,我会得到“typeMapping[viewType] 不是函数”
    • 在调用结束时手动粘贴括号: view = new typeMapping[viewType]() 应该让你也可以传入你的参数(假设它有效,这不是我个人尝试过的东西之前。
    • 不幸的是,在这两种情况下,如果 typeMapping 将它们作为字符串,无论有无括号 (),我都会遇到相同的错误。
    • 没关系!!我的问题完全不相关,上面的实现确实有效,是我传递的模型无效,对不起。
    • 好的,作为一种不同的方法,显示。是静态的,所以...如何将其从 typeMapping 部分中取出,将其添加到 view= new Show['typeMapping[viewtype]](); ?有更好的吗?
    猜你喜欢
    • 1970-01-01
    • 2011-04-14
    • 2014-05-31
    • 2020-07-30
    • 2015-07-22
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多