code: func New(selectorOrHTMLElement interface{}, structPtr interface{}) *ViewModel {
  	opt := NewOption()
  	opt.El = selectorOrHTMLElement
  	opt.SetDataWithMethods(structPtr)
  	vm := opt.NewViewModel()
  	vMap[structPtr] = vm
  	return vm
  }
docs: // New creates a VueJS Instance to apply bidings between `structPtr` and
  // `selectorOrElementOrFunction` target, it also connects the generated
  // VueJS instance with the `structPtr`, you can use `vue.GetVM` from
  // you code to get the generated VueJS Instance which can be used as `this`
  // for JavaScirpt side.
  //
  //  * all `exported fields` of the `struct` would become VueJS Instance's
  //  data which can be used in the html to do data binding: v-bind, etc
  //
  //  * all `exported funcs` of the `struct` would become VueJS Instance's
  //  methods which can be called as html event handler: v-on, etc
  //
  //  * the `struct` talked above should have an embeded anonymous
  //  `*js.Object` field and `exported fields` should have proper
  //  `js struct tag` for bidirectionaly data bindings
  //
  //  * if the `struct` has no embeded anonymous `*js.Object`, it can
  //  only be used for information displaying purpose.
  //
  // Rules for exported functions usage IMPORTANT!:
  //
  //  * If your func uses any of the `exported fields`, then DONOT modify any.
  //  These can be viewed roughly as `computed attribute` in `VueJS` wourld,
  //  with the form of function invocation (invoke).
  //
  //  * If your func modifies any of the `exported fields`, then DONOT use it
  //  in any data `DISPLAYing` expression or directive. They can be used as
  //  event handlers (their main use cases).
  //
  // These rules are required for VueJS dependency system to work correctly.
  //
  // You can get this *ViewModel instance through `vue.GetVM(structPtr)`
  // which acts as `this` of the VueJS(javascript) side of world