Knockoutjs - 将可观察值传递给另一个函数?

时间:2013-09-12 11:36:09

标签: knockout.js

我正在使用返回模式加载我的viewmodel。我的VM有一个名为'intro'的可观察对象。

我想将'intro'observable的值传递给我页面上的另一个脚本。

在下面的代码中,如何将twtTitle的值设置为'intro'可观察值?

感谢。

<script type="text/javascript">
      var twtTitle = my.intro.value;
      var twtUrl = location.href;
      var maxLength = 140 - (twtUrl.length + 1);
      if (twtTitle.length > maxLength) {
          twtTitle = twtTitle.substr(0, (maxLength - 3)) + '...';
      }
      var twtLink = 'http://twitter.com/home?status=' 
                  + encodeURIComponent(twtTitle + ' ' + twtUrl);
      document.write
      (
         '<a href="' + twtLink + '" target="_blank"' + '>' + 
         '<img src="/Images/tweetthis.gif"  border="0" alt="Tweet This!" /' + 
         '><' + '/a>'
      );
</script>

1 个答案:

答案 0 :(得分:0)

事件聚合器模式怎么样?我为SignalR Eventaggregator库做了一个 https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy

如果您不需要SignalR,您可以提取相关客户端事件聚合器代码,请参阅此小提琴

http://jsfiddle.net/jh8JV/

对于您的特定用途,您可以

this.intro = ko.observable();
this.intro.subscribe(function(value) {
   signalR.eventAggregator.publish(new MyApp.IntroChanged(value));
}, this); 

这种模式的好处是解耦,严格类型的消息和高可扩展性。