流星:应用程序崩溃

时间:2015-09-02 16:51:48

标签: javascript meteor angular-meteor meteor-collection2

我在其中一个控制器中有以下方法。当我使用[self.productImageView sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat: IMAGES_PATH , [[_details3 objectAtIndex:0] imagenMuestra]]] placeholderImage:[UIImage imageNamed:nil] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *url) { [General hideHUD:HUD2]; }]; 从html代码调用此方法时,浏览器崩溃了。有多次调用此方法,浏览器没有响应。有人可以帮忙解决这个问题吗?

{{ getLastMessage }}

1 个答案:

答案 0 :(得分:1)

我认为您的问题是getLastMessage是一个函数,而不是属性,因此您的代码相当于{{ function(){} }},甚至从未被调用过。您需要实际调用{{getLastMessage()}}之类的函数或立即调用控制器上的函数。

如果我可以为您提供稍微简单的解决方案(尽管可能效率较低):

如果尚未将集合绑定到范围变量,则可能需要执行以下操作:

// SERVER CODE -- put in your /server directory

// NB: I am only publishing the specific user's (uid) chats in case someone 
//     finds this through Google and by accident creates a vulnerability
//     unintentionally. Feel free to change the Mongo query if you want to     
//     publish all chats to all users 

Meteor.publish("Chats", function () {
  return Chats.find({uid:this.userId}, {fields: {'_id': 1,'content': 1,'uid': 1}});
});

// CLIENT CODE

$scope.chatsCollection = $scope.$meteorCollection("Chats").subscribe("Chats");
// lastMessage should be updated reacitvely -- no need to run a function
$scope.lastMessage = $scope.chatsCollection.slice(-1)[0];

据说那个片段假设Meteor Collection按时间顺序追加新文档,所以现实可能不那么简单。 $ scope.chatsCollection具有数组的所有方法,因此您可以对其进行排序或使用类似underscore.js的内容来对其进行查询。

您可能考虑采用的另一种方法是使用纯粹的流星Cursor.observe method - 您在初始方法中看起来很像。这里的一个好处是您可以对Mongo查询执行任何必要的排序操作,这可能更有效。

我认为这看起来像是:

// CLIENT SIDE CODE
// Initial assignment 
$scope.lastMessage = Chats.find({uid:Meteor.userId(), {
                fields: {
                    '_id': 1,
                    'content': 1,
                    'uid': 1
                },
                sort: {INSERT YOUR SORT HERE, e.g. by creation time}
            })
        .fetch().slice(-1).pop();



// Subscription to changes made on the query
   Chats.find({uid:Meteor.userId(), {
            fields: {
                '_id': 1,
                'content': 1,
                'uid': 1
            },
            sort: {INSERT YOUR SORT HERE, e.g. by creation time}
        })
    .observe({added: function(document){$scope.lastMessage = document}});