Javascript 如何从视图模型中引用模型类型?
总的javascript noob在这里。。。有三个文件:knockout、RoomModel和RoomViewModel 房间模型 RoomViewModelJavascript 如何从视图模型中引用模型类型?,javascript,knockout.js,Javascript,Knockout.js,总的javascript noob在这里。。。有三个文件:knockout、RoomModel和RoomViewModel 房间模型 RoomViewModel RoomViewModel如何知道RoomModel是什么 我把它们都放在视图中,但也不确定这是否正确 <body> <script src="Models/RoomModel.js"></script> <script src="ViewModels/RoomViewModel.js">
RoomViewModel
如何知道RoomModel
是什么
我把它们都放在视图中,但也不确定这是否正确
<body>
<script src="Models/RoomModel.js"></script>
<script src="ViewModels/RoomViewModel.js"></script>
<script type='text/javascript' src='/Scripts/knockout-3.4.0.js'>
var roomViewModel = new RoomViewModel(new RoomModel('Hello World'));
ko.applyBindings(roomViewModel);
</script>
</body>
var roomViewModel=new roomViewModel(new RoomModel('Hello World'));
ko.应用绑定(roomViewModel);
我在这里尝试将MVVM的最简单版本放在以下步骤中
//1。数据模型
var roomModel=功能roomModel(名称){
var self=这个;
self.firstName=ko.observable(名称);
}
//2. 创建模型的实例
var roomModelObject=新roomModel(“O.O”);
//3. 这是我的数据模型
var ViewModel=函数(){
this.fullName=ko.pureComputed(函数(){
返回roomModelObject.firstName()+“-Computed”;
},这个);
};
// 4. 结合
应用绑定(新的ViewModel())代码>
名字:
你好代码>JavaScript没有静态键入系统。相反,它有助于将JS理解为“如果变量像鸭子一样走路,像鸭子一样嘎嘎叫,那么它一定是鸭子”
根据你的问题:
RoomViewModel如何知道RoomModel是什么
答案是:如果RoomViewModel
构造函数的输入变量具有Name
属性,那么它也可以被视为有效的RoomModel
换句话说,视图模型不需要知道输入是有效的RoomModel。这取决于打电话的人。对于视图模型构造函数,这同样很好:
var roomViewModel = new RoomViewModel({ Name: 'Hello World' });
从某种意义上说:的确如此
作为一个脚注,如果你对这个系统感到不安,你可以看看打字稿。它向JavaScript添加了更多的静态类型特性,允许您将输入参数的类型锁定到特定的构造函数函数(“类”在Typescript术语中)或接口(允许您保留一些duck类型特性).创建roomModel
outside viewModel的实例,并在viewModel函数内部访问该实例错误!不是很好,很难,在这里工作很好#InstanceShareing.@supercool谢谢分享。只是想让事情变得简单。roomModel实例不会给出错误,只需检查代码段即可。是的,很好,它不会给出任何错误,但我指的是更大的图片。我所担心的是OP可能会在外部创建一个实例,就像你在(2)
中指出的那样,如果app'n变得更大,这会导致不期望的结果。最好将步骤2移动到viewModel中,使实例vm特定。干杯
<body>
<script src="Models/RoomModel.js"></script>
<script src="ViewModels/RoomViewModel.js"></script>
<script type='text/javascript' src='/Scripts/knockout-3.4.0.js'>
var roomViewModel = new RoomViewModel(new RoomModel('Hello World'));
ko.applyBindings(roomViewModel);
</script>
</body>
var roomViewModel = new RoomViewModel({ Name: 'Hello World' });