কোনও দৃশ্যে প্যারামিটারগুলি কীভাবে পাস করবেন


93

আমার বোতামগুলির একটি সিরিজ রয়েছে যা ক্লিক করার সময় বোতামের ঠিক নীচে অবস্থিত একটি পপআপ মেনু প্রদর্শন করা হয়। আমি ভিউতে বোতামের অবস্থানটি পাস করতে চাই। আমি এটা কিভাবে করবো?

ItemView = Backbone.View.extend({
    tagName: 'li',
    events: {
        'click': 'showMenu'
    },
    initialize: function() {
        _.bindAll(this, 'render');
    },
    render: function() {
    return $(this.el).html(this.model.get('name'));
    },
    showMenu: function() {
        var itemColl = new ItemColl();
        new MenuView({collection: itemColl}); // how to pass the position of menu here?
    }
});

উত্তর:


168

আপনি মেনুভিউটি নির্মাণ করার সময় আপনাকে অতিরিক্ত পরামিতিটি পাস করতে হবে। initializeফাংশন যুক্ত করার প্রয়োজন নেই ।

new MenuView({
  collection: itemColl,
  position: this.getPosition()
})

এবং তারপরে, MenuViewআপনি ব্যবহার করতে পারেন this.options.position

আপডেট: যেহেতু @ মিমি খুব সংক্ষিপ্ত রাজ্য , ১.১.০ থেকে, ব্যাকবোন ভিউগুলি আর এই স্বয়ংক্রিয়ভাবে কনস্ট্রাক্টরের কাছে দেওয়া বিকল্পগুলি স্বয়ংক্রিয়ভাবে সংযুক্ত করে না, তবে আপনি যদি পছন্দ করেন তবে আপনি নিজেই এটি করতে পারেন।

সুতরাং আপনার initializeপদ্ধতিতে, আপনি optionsপাস হিসাবে সংরক্ষণ করতে পারেন this.options:

initialize: function(options) {
    this.options = options;
    _.bindAll(this, 'render');
},

বা @ ব্রাভ ডেভের বর্ণিত কিছু সূক্ষ্ম উপায় ব্যবহার করুন ।



4
এটি নিখুঁতভাবে কাজ করে, কেবল আপনার ভিউতে প্যারামিটারটি যুক্ত করুন পদ্ধতিটি শুরু করুন: আরম্ভ করুন: ফাংশন (বিকল্পগুলি) {সতর্কতা (বিকল্পগুলি p পজিশন); }
ক্যাবুকসা.ম্যাপছে

@ ক্যাবক্সা.ম্যাপছে না, এটি কাজ করে না। এই উত্তরটি ব্যবহার করে this.options.position, না options.position। দর্শনগুলি initializeযুক্তিগুলিতে সংযুক্ত করার জন্য ব্যবহৃত হত this.optionsতবে এটি 1.1.0 এ থেমেছিল।
মিউ খুব ছোট

46

এতে একটি বিকল্প যুক্তি যুক্ত করুন initialize:

initialize: function(options) {
    // Deal with default options and then look at options.pos
    // ...
},

এবং তারপরে আপনি নিজের দৃশ্য তৈরি করার সময় কিছু বিকল্পগুলিতে পাস করুন:

var v = new ItemView({ pos: whatever_it_is});

আরও তথ্যের জন্য: http://backbonejs.org/# ভিউ- কনস্ট্রাক্টর


এটি বেশিরভাগ পরিস্থিতিতে সবচেয়ে মার্জিত / সহজ।
কুলেন সান

@ কলেনসুন: ধন্যবাদ আমি এই পদ্ধতির স্পষ্টবাদী ব্যক্তিকে পছন্দ করি, যাদুকরী "দূরত্বের অ্যাকশন" ব্যবহারের ফলে this.optionsআমাকে রক্ষণাবেক্ষণ এবং ডিবাগিং দুঃস্বপ্ন দেয়।
মিউ

আমি প্রথমে ব্যাকবোন লিঙ্কটি দেখেছি কিন্তু আপনার উদাহরণটি এটি আমার জন্য পরিষ্কার করেছে। ধন্যবাদ
ম্যানুয়েল হার্নান্দেজ

এটি অবহেলা করা হয়েছে, এবং আপনি আর ব্যবহার করতে পারবেন নাthis.options
ট্রিপ


12

ব্যাকবোন ১.১.০ হিসাবে, optionsযুক্তিটি আর দেখার সাথে স্বয়ংক্রিয়ভাবে সংযুক্ত থাকে না ( আলোচনার জন্য 2458 সংখ্যা দেখুন )। আপনাকে এখন প্রতিটি ভিউয়ের বিকল্পগুলি ম্যানুয়ালি সংযুক্ত করতে হবে:

MenuView = Backbone.View.extend({
    initialize: function(options) {
        _.extend(this, _.pick(options, "position", ...));
    }
});

new MenuView({
    collection: itemColl,
    position: this.getPosition(),
    ...
});

বিকল্পভাবে আপনি সাদা-তালিকাভুক্ত বিকল্পগুলি স্বয়ংক্রিয়ভাবে সংযুক্ত করতে এই মিনি প্লাগইনটি ব্যবহার করতে পারেন :

MenuView = Backbone.View.extend({
    options : ["position", ...] // options.position will be copied to this.position
});

-1

অন্য অবস্থান থেকে পাস

 new MenuView({
   collection: itemColl,
   position: this.getPosition()
})

আপনি যে পাসটি ভেরিয়েবল পাচ্ছেন তা দেখার জন্য আরম্ভ করার জন্য একটি বিকল্প যুক্তি যুক্ত করুন,

initialize: function(options) {
   // Deal with default options and then look at options.pos
   // ...
},

মান ব্যবহার করতে -

   var v = new ItemView({ pos: this.options.positions});

5
উন্নত উত্তরগুলি সমষ্টিগত নয় লিখুন।
কোঙ্গা রাজু

এই উত্তর উন্নত!
ইমতিয়াজ মির্জা

-2

দর্শনার্থী দর্শনার্থী পুনরুদ্ধার করতে this.options ব্যবহার করুন

 // Place holder
 <div class="contentName"></div>

 var showNameView = Backbone.View.extend({
        el:'.contentName',
        initialize: function(){
            // Get name value by this.options.name
            this.render(this.options.name);
        },
        render: function(name){
            $('.contentName').html(name);
        }
    });

    $(document).ready(function(){
        // Passing name as argument to view
        var myName1 = new showNameView({name: 'Nishant'});
    });

কাজের উদাহরণ: http://jsfiddle.net/Cpn3g/1771/

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.