Javascript Knockout.js:从模型中分离ViewModel逻辑

Javascript Knockout.js:从模型中分离ViewModel逻辑,javascript,mvvm,knockout.js,viewmodel,Javascript,Mvvm,Knockout.js,Viewmodel,在主页上的视频教程中,演示者设置了一个简单的示例,其中ViewModel包含一个observableArray属性,该属性包含自定义对象的实例(在本例中为“朋友”对象): 然后,将使用KO模板渲染此内容: <script id="friendsTemplate" type="text/html"> <li> <input data-bind="value: name" /> <button data-bind="click: remo

在主页上的视频教程中,演示者设置了一个简单的示例,其中ViewModel包含一个
observableArray
属性,该属性包含自定义对象的实例(在本例中为“朋友”对象):

然后,将使用KO模板渲染此内容:

<script id="friendsTemplate" type="text/html">
  <li>
    <input data-bind="value: name" />
    <button data-bind="click: remove">Remove</button>
  </li>
</script>

  • 去除

  • 我觉得奇怪的是,从ViewModel的
    friends
    集合中删除
    friend
    对象(模型?)的逻辑是在
    friend
    对象本身中实现的。这是否会在
    friend
    对象和ViewModel实例之间创建不希望的耦合?是否有更一致的设计方法允许在ViewModel中而不是在对象中定义
    friend
    功能?

    更常见的模式是将
    removeFriend
    功能提高一个级别,并使用以下方式绑定到它:

    <button data-bind="click: $parent.removeFriend">Remove</button>
    

    我更喜欢这样。谢谢你的回答。
    <button data-bind="click: $parent.removeFriend">Remove</button>
    
    friends: ko.observableArray(),
    removeFriend: function(friend) {
        viewModel.friends.remove(friend);
    }