ব্যাকবোন.ভিউ "এল" বিভ্রান্তি


97

কিভাবে একটি দৃশ্য elপরিচালনা করা উচিত ? এটি সেট করতে হবে, অন্যথায় ইভেন্টগুলি আগুন দেয় না ( এখানে দেখুন )।

তবে এটি এমন কোনও উপাদান হওয়া উচিত যা ইতিমধ্যে পৃষ্ঠায় রয়েছে? আমার অ্যাপ্লিকেশনটিতে, আমি একটি (jQuery টেমপ্লেট) টেমপ্লেটটিকে একটি ফিন্সিবক্সে রেন্ডার করি। এক্ষেত্রে কী হওয়া উচিত el?


11
আমি ভেবেছিলাম - আমি কেবল এই elজিনিসটির সাথে ফিড করছি ।
যুগল জিন্দল

elভালো হয় gf। এগুলি কেউ পুরোপুরি বুঝতে পারে না।
মাহি

উত্তর:


121

একটি ইভেন্ট এল যেখানে সমস্ত ইভেন্টের বাইন্ডিং হয়। আপনাকে এটি ব্যবহার করতে হবে না তবে আপনি যদি আগুনের ইভেন্টগুলিতে ব্যাক হোন করতে চান তবে আপনার এলেন্ডারে আপনার রেন্ডারিংয়ের কাজটি করা উচিত। একটি দর্শন এল একটি ডিওএম উপাদান তবে এটি প্রাক-বিদ্যমান উপাদান হতে হবে না। আপনি যদি আপনার বর্তমান পৃষ্ঠা থেকে কোনওটি না টানেন তবে এটি তৈরি করা হবে তবে আপনি যদি কখনও কিছু দেখতে চান তবে আপনাকে এটি পৃষ্ঠাতে সন্নিবেশ করতে হবে।

একটি উদাহরণ: আমার কাছে একটি ভিউ রয়েছে যা পৃথক আইটেম তৈরি করে

window.ItemView = Backbone.View.extend({
    tagName: "li", //this defaults to div if you don't declare it.
    template: _.template("<p><%= someModelKey %></p>"),
    events: {
         //this event will be attached to the model elements in
         //the el of every view inserted by AppView below
        "click": "someFunctionThatDoesSomething"
    },
    initialize: function () { 
        _.bindAll(this, "render");
        this.render();
    },
    render: function () {
        this.el.innerHTML = this.template(this.model.toJSON());
        return this;
    }
});
window.AppView = Backbone.View.extend({
    el: $("#someElementID"), //Here we actually grab a pre-existing element
    initialize: function () { 
        _.bindAll(this, "render");
        this.render(new myModel());
    },
    render: function (item) { 
        var view = new ItemView({ model: item });
        this.el.append(view.render().el);
    }
});

প্রথম দৃশ্যটি কেবল তালিকার আইটেমগুলি তৈরি করে এবং দ্বিতীয় দৃশ্যটি এগুলিকে পৃষ্ঠাতে রাখে। আমি মনে করি এটি ব্যাকবোন.জেএস সাইটে টোডো উদাহরণে যা ঘটেছিল তার সাথে বেশ মিল । আমি মনে করি কনভেনশন হ'ল আপনাকে লিখিত সামগ্রী সরবরাহ করতে re সুতরাং এল আপনার টেম্পলেটযুক্ত সামগ্রী স্থাপনের জন্য অবতরণ স্থান বা একটি ধারক হিসাবে কাজ করে। ব্যাকবোন তার ইভেন্টগুলি এর অভ্যন্তরের মডেল ডেটার সাথে আবদ্ধ করে।

যখন আপনি একটি দৃশ্য তৈরি আপনি ব্যবহার চার উপায় এল নিপূণভাবে পারেন el:, tagName:, className:, এবং id:। যদি এগুলির কোনওটিই আইডি বা শ্রেণিবিহীন কোনও ডিভিতে এল ডিফল্ট হিসাবে ঘোষিত না হয়। এটি এই সময়ে পৃষ্ঠার সাথেও যুক্ত নয়। আপনি ট্যাগ নাম ব্যবহার করে ট্যাগটি অন্য কোনওটিতে পরিবর্তন করতে পারেন (যেমন tagName: "li", আপনাকে একটি এল প্রদান করবে <li></li>)। আপনি একইভাবে এল এর আইডি এবং ক্লাস সেট করতে পারেন। তবুও এল আপনার পৃষ্ঠার অংশ নয়। এল সম্পত্তি আপনাকে এল বস্তুর খুব সূক্ষ্ম শস্য ম্যানিপুলেশন করতে দেয়। বেশিরভাগ সময় আমি একটি ব্যবহার করিel: $("someElementInThePage")যা প্রকৃতপক্ষে আপনার বর্তমান পৃষ্ঠায় আপনার দৃষ্টিভঙ্গিতে এল করার জন্য সমস্ত কারচুপিকে আবদ্ধ করে। অন্যথায় যদি আপনি পৃষ্ঠায় আপনার ভিউতে সমস্ত কঠোর পরিশ্রম দেখতে চান তবে আপনার নিজের ভিউতে অন্য কোনও পৃষ্ঠাতে সম্ভবত এটি সন্নিবেশ / সংযুক্ত করতে হবে (সম্ভবত রেন্ডারে) in আমি এলটিকে এমন ধারক হিসাবে ভাবতে চাই যা আপনার সমস্ত দৃষ্টিভঙ্গি পরিচালনা করে।


ব্যাখ্যা এবং উদাহরণের জন্য ধন্যবাদ! আমি মনে করি নির্দিষ্ট পরিস্থিতিতে এলের কী হওয়া উচিত তা সর্বদা পরিষ্কার নয় এবং বিকাশকারীকে এর জন্য "অনুভূতি" পেতে হবে। আপনার ব্যাখ্যা অবশ্যই সাহায্য করেছে! যদিও একটি প্রশ্ন: আপনি আপনার আইটেমভিউতে কোনও এল সংজ্ঞায়িত করেন না তবে আপনি রেন্ডার ফাংশনে এটি অ্যাক্সেস করেন। এই কাজ করবে? আপনি যদি স্পষ্টভাবে এটি সংজ্ঞায়িত না করেন তবে কি কোনও ধরণের ডিফল্ট এল রয়েছে?
ম্যানুয়েল মিউরার

4
ডিফল্টরূপে এল একটি "ডিভ" ট্যাগ যা কোনও আইডি বা শ্রেণি নেই। এটি একটি ডোম অবজেক্ট যা আপনার পৃষ্ঠার ডিওএমের সাথে আবদ্ধ নয়। সাধারণত আমি এটি পৃষ্ঠায় রেন্ডার ফাংশনে বা প্যারেন্ট ভিউয়ের রেন্ডার ফাংশনটিতে সন্নিবেশ / সংযোজন করি।
লেআরয়

এল সংজ্ঞায়িত করে এমন কিছু বৈশিষ্ট্য সহ আমার উত্তর আপডেট করে।
লেআরয়

4
আমি অনুমান করি যে আমার একমাত্র ইস্যুটি এল: pre ("# #EuleIDID") এর সাথে একটি পূর্ব-বিদ্যমান উপাদানটি দখল করার সাথে আমার দৃষ্টিভঙ্গি সম্ভবত এটির চেয়ে বেশি জানে, এটির পুনরায় ব্যবহার করা শক্ত করে তোলে। "DOM থেকে decouple দেখুন ..." দেখুন coenraets.org/blog/2012/01/...
স্কট কোটস

@scoarescoare যেহেতু আপনি ইনস্ট্যান্টেশনে এল সম্পত্তি যুক্ত করছেন ভিউটি আসলে তার চেয়ে বেশি কিছু জানে না, এটি হালকা এবং আপনি যে কোনও $ (এল) হস্তান্তর করতে চান তা গ্রহণ করতে সক্ষম। সুতরাং এটি এটি সত্যই পুনরায় ব্যবহারযোগ্য করে তোলে really
মেটাগ্রাফার

6

বিট এখন বয়স্ক, তবে আমিও বিভ্রান্ত হয়ে পড়েছিলাম, এবং অন্য যে লোকেরা এখানে আসে তাদের পক্ষে এই ঝাঁকুনি সাহায্য করতে পারে - http://jsfiddle.net/hRndn/2/

var MyView = Backbone.View.extend({

    events: {
        "click .btn" : "sayHello",
    },

    sayHello : function() {
        alert("Hello");
    },


    render : function() {
        this.$el.html("<input type='button' class='btn' value='Say Hello'></input>");

    }
});

$(function() {
    myView = new MyView({el:"#parent_id"});
    myView.render();
});

আমি এই মডেলটি অনুসরণ করেছি এবং আশা করি আমি না থাকি। একটি দৃশ্যটি ধ্বংস করতে এবং বাইন্ডিংগুলি সরাতে ব্যাকবোনটির সম্মেলনটি ভিউ.রেভ ()। এটি destro এলকে ধ্বংস করে এবং এটি ডিওএম থেকে সরিয়ে দেয়, সুতরাং যখন আপনাকে আবার ভিউটি দেখাতে হবে তখন $ এল এর অস্তিত্ব নেই।
জেজে

@ মার্ক কি যদি আমি সামুদ্রিক মত মিশ্র স্থাপত্য ব্যবহার করি .... আমার এখনও ভিউ এর এল থাকা দরকার?
afr0

আপনার ফিডল কোডটি কাজ করে না, লিঙ্কটি jsfiddle.net/hRndn
Izzy

@ মাহি হ্যাঁ আপনি ঠিক বলেছেন। আমি সম্ভবত ভুল লিঙ্কটি পেস্ট করেছি, দুঃখিত। এটির একটি কাজ করে: jsfiddle.net/hRndn/127
Izzy

1

আপনি চান যে আপনার 'এল' এমন কোনও উপাদানকে রেফারেন্স করতে চান যাতে কোনও শিশু উপাদান রয়েছে যা আপনার দৃষ্টিকোণে পরিবর্তন ঘটাতে পারে এমন কোনও ইভেন্ট রয়েছে। "বডি" ট্যাগের মতো চওড়া হতে পারে।


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