四处走动使用骨干

时间:2013-11-21 22:07:59

标签: javascript backbone.js

我在我的应用程序中广泛使用了主干。我非常喜欢它在模型 - >视图中给出的事件绑定。我开始使用骨干进行Javascript编码,如果没有它,我真的不知道如何编码。

我正在构建另一个小应用程序。我想在不使用骨干的情况下编码。我有一个视图和与之相关的模型。当模型改变时,我想查看更新。目前在每种方法中,我都是这样手动完成的:

function updatesomething(){
    //update model
    model[something] = new updated value;

    //update view
    $(".something").addClass("updated value");
}

我想通过使用pubsub类型模式使视图正在侦听模型的更改。如何在不使用主干的情况下在普通javascript中实现它,以便我的代码看起来像这样:

function updatesomething(){
    model.update(something);
}

//and view listening to this updates automatically

1 个答案:

答案 0 :(得分:2)

这是一个很好的问题,你应该问一个问题。开发人员不假思索地伸手去拿框架,就像有人在没有先品尝食物的情况下抓盐。对于许多人来说,许多任务甚至是简单的框架都是过度的,可以用vanilla js和基本的OO模式替换。

这是使用vanilla js的sub / pub模式的简单演示。您可以使用提供的mixin来使您的任何普通js模型对象可观察。然后,您可以让您的视图订阅它们并更新更新。

http://jsbin.com/umOhiFOP/1/edit

function makeObservable() {
  this._subscribers = [];
  this.subscribe = function(event, target, callback) {
    this._subscribers.push({event:event, target:target, callback:callback});
  }
  this.trigger = function(event) {
    this._subscribers.forEach(function(subscriber) {
      if (event !== subscriber.event) return;
        subscriber.callback.call(subscriber.target);
    });
  }
}

function Todo() {
  this.isDone = false;
  this.complete = function() {
    this.isDone = true;
    this.trigger('completed');
  }
}
makeObservable.call(Todo.prototype);

function TodoSubscriber() {
  this.onComplete = function() {
    console.log('Todo completed');
  }
}

var todo = new Todo();
var listener = new TodoSubscriber();

todo.subscribe('completed', listener, listener.onComplete);

todo.complete();

您也可以喜欢这篇文章:https://moot.it/blog/technology/riotjs-the-1kb-mvp-framework.html