Если поле пустое или заполнено в JSON / jQuery, не отображается - PullRequest
1 голос
/ 14 марта 2012

Я создаю страницу на Facebook и не хочу, чтобы события отображались в моей ленте.

Событие имеет следующие поля в формате JSON:

  • сообщение
  • история
  • значок
  • 1012 * действия *
  • тип

Сообщение содержит:

  • сообщение
  • фотография
  • ссылка

Таким образом, разница заключается в добавлении события в поле story . Теперь я хочу отфильтровать эти сообщения, но как вы можете сказать: «Если поле заполнено, не показывать сообщение»

Я не очень разбираюсь в javascript, как вы можете видеть. Я использовал этот урок: нажмите

(function($){

    $.fn.facebookWall = function(options){

        options = options || {};

        if(!options.id){
            throw new Error('You need to provide an user/page id!');
        }

        if(!options.access_token){
            throw new Error('You need to provide an access token!');
        }

        // Default options of the plugin:

        options = $.extend({
            limit: 15   // You can also pass a custom limit as a parameter.
        },options);

        // Putting together the Facebook Graph API URLs:

        var graphUSER = 'https://graph.facebook.com/'+options.id+'/?fields=name,picture&access_token='+options.access_token+'&callback=?',
            graphPOSTS = 'https://graph.facebook.com/'+options.id+'/posts/?access_token='+options.access_token+'&callback=?&date_format=U&limit='+options.limit;

        var wall = this;

        $.when($.getJSON(graphUSER),$.getJSON(graphPOSTS)).done(function(user,posts){

            // user[0] contains information about the user (name and picture);
            // posts[0].data is an array with wall posts;

            var fb = {
                user : user[0],
                posts : []
            };

            $.each(posts[0].data,function(){

                // We only show links and statuses from the posts feed:


                if ((this.story == '') || !this.message){
                    return true;
                }


                // Copying the user avatar to each post, so it is
                // easier to generate the templates:
                this.from.picture = fb.user.picture;

                // Converting the created_time (a UNIX timestamp) to
                // a relative time offset (e.g. 5 minutes ago):
                this.created_time = relativeTime(this.created_time*1000);

                // Converting URL strings to actual hyperlinks:
                this.message = urlHyperlinks(this.message);

                fb.posts.push(this);
            });

            // Rendering the templates:
            $('#headingTpl').tmpl(fb.user).appendTo(wall);

            // Creating an unordered list for the posts:
            var ul = $('<ul>').appendTo(wall);

            // Generating the feed template and appending:
            $('#feedTpl').tmpl(fb.posts).appendTo(ul);
        });

        return this;

    };

    // Helper functions:

    function urlHyperlinks(str){
        return str.replace(/\b((http|https):\/\/\S+)/g,'<a href="$1" target="_blank">$1</a>');
    }

    function relativeTime(time){

        // Adapted from James Herdman's http://bit.ly/e5Jnxe

        var period = new Date(time);
        var delta = new Date() - period;

        if (delta <= 10000) {   // Less than 10 seconds ago
            return 'Zo net ';
        }

        var units = null;

        var conversions = {
            millisecond: 1,     // ms -> ms
            seconden: 1000,     // ms -> sec
            minuten: 60,            // sec -> min
            uur: 60,            // min -> hour
            dag: 24,            // hour -> day
            maand: 30,          // day -> month (roughly)
            jaar: 12            // month -> year
        };

        for (var key in conversions) {
            if (delta < conversions[key]) {
                break;
            }
            else {
                units = key;
                delta = delta / conversions[key];
            }
        }

        // Pluralize if necessary:

        delta = Math.floor(delta);
        if (delta !== 1) { units += 'en'; }
        return [delta, units, "geleden"].join(' ');

    }

})(jQuery);

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Вы хотите проверить, определена ли история в массиве, для этого вы используете функцию typeof.

if (typeof this.story == 'undefined')

0 голосов
/ 14 марта 2012

эта проверка должна удалить все сообщения с историей:

if(this.story === undefined || this.story == null) {
   // Non Story
} else {
   // Story 
}
...