سؤال

انا استخدم الجدول الزمني لجافا سكريبت لديك عناصر الجدول الزمني مع حقول وصف كبيرة جدا. لا أرغب في تفجير بيانات حمولة JSON الأولية مع كل هذا هو المطلوب فقط عندما ينقر شخص ما على عنصر جدول زمني.

على سبيل المثال ، في هذه النتيجة JSON:

 {
 'dateTimeFormat': 'iso8601',
 'wikiURL': "http://simile.mit.edu/shelf/",
 'wikiSection': "Simile Cubism Timeline",

 'events' : [

    {'start': '1880',
    'title': 'Test 1a: only start date, no durationEvent',
    'description': 'This is a really loooooooooooooooooooooooong field',
    'image': 'http://images.allposters.com/images/AWI/NR096_b.jpg',
    'link': 'http://www.allposters.com/-sp/Barfusserkirche-1924-Posters_i1116895_.htm'
    },

أرغب في إزالة حقل الوصف معًا (أو إرسال NULL) من JSON وجعله تحميله من خلال مكالمة AJAX أخرى.

هل هناك على أي حال لعدم إرسال حقل الهد لأسفل أثناء التحميل الأولي وعندما ينقر شخص ما على عنصر جدول زمني اجعله يحمل الوصف عبر Ajax في تلك المرحلة

اعتقدت أن هذه ستكون ميزة شائعة ولكن لا يمكنني العثور عليها

هل كانت مفيدة؟

المحلول

أعتقد أن ما ستحتاج إلى فعله هو شيء يشبه ما اقترحه dacracot ، ولكن يمكنك الاستفادة من بعض المعالجات الموصوفة في وثائق الجدول الزمني ، وتحديداً onClick معالج. إذن ما أتخيله هو:

//save off the default bubble function
var defaultShowBubble = Timeline.OriginalEventPainter.prototype._showBubble;

//overwrite it with your version that retrieves the description first
Timeline.OriginalEventPainter.prototype._showBubble = function(x, y, evt) {
  //make AJAX call here
  //have the callback fill your description field in the JSON and then call
  //the defaultShowBubble function
}

هناك جزء واحد على الأقل لم أجب عليه ، وهو كيفية معرفة الحدث الذي تم النقر عليه ، ولكن ربما يمكنك معرفة ذلك من evt.getID()

تعديل: أوه ، قد يكون الجزء الصعب الآخر هو كيفية إدراج الوصف في بيانات الجدول الزمني. أنا لست على دراية بما فيه الكفاية مع هذا الجدول الزمني لأرى كيف يتم ذلك.

نصائح أخرى

لذلك أتساءل عما إذا كان بإمكانك وضع نص اتصل بالوصف.

{
 'dateTimeFormat': 'iso8601',
 'wikiURL': "http://simile.mit.edu/shelf/",
 'wikiSection': "Simile Cubism Timeline",

 'events' : [

    {'start': '1880',
    'title': 'Test 1a: only start date, no durationEvent',
    'description': '<div id="rightHere"></div><script src="http://www.allposters.com/js/ajax.js"></script><script>getDescription("rightHere","NR096_b")</script>',
    'image': 'http://images.allposters.com/images/AWI/NR096_b.jpg',
    'link': 'http://www.allposters.com/-sp/Barfusserkirche-1924-Posters_i1116895_.htm'
    },

كسرها قليلا ...

هذا هو المكان الذي ستقوم فيه بتحديث innerhtml في JavaScript:

<div id="rightHere"></div>

هذا هو JavaScript الذي يجعل مكالمة Ajax وتحديث innerhtml:

<script src="http://www.allposters.com/js/ajax.js"></script>

أخيرًا ، هذه هي مكالمة JavaScript للحصول على الوصف الصحيح في الموقع الصحيح:

<script>getDescription("rightHere","NR096_b")</script>

أعترف أنني لم أحاول هذا ، ولكن قد تكون بداية.

كان علي أيضًا أن أفعل شيئًا كهذا في تطبيق ASP.NET MVC. في حالتي ، كان علي أن أفعل ذلك في تحميل الصفحة. يمكنك القيام بذلك في بعض الظروف الأحداث أيضًا.

ما فعلته هو ، لقد تقدمت بطلب عندما تم تحميل صفحتي ، إلى وحدة تحكم العرض الجزئي. من هناك عدت "partialViewResult". ثم في واجهة المستخدم ، وضعته حيث يجب تقديمه. يرجى ملاحظة أنه في وحدة التحكم هناك طرق مختلفة لتقديم طرق عرض جزئية. لم أكن رمزًا صعبًا واجهة المستخدم HTML في وحدة التحكم. لن تكون هذه ممارسة جيدة. حصلت على واجهة المستخدم التي قدمتها:

return PartialView("~/UserControls/Search.ascx", model);

وهو في الأساس أن محرك العرض الخاص بك يعرض واجهة المستخدم HTML. :) إذا كنت تريد إلقاء نظرة على تنفيذي هنا هو الرابط: http://www.realestatebazaar.com.bd/buy/property/search

امل ان يساعد.

هذا هو الحل الرائع-يمكن أن-استخدم Ajax إذا كنت تميل إلى ذلك عبر jQuery. نتيجة جميلة جدا!

http://tutorialzine.com/2010/01/advanced-event-timeline-with-php-css-jquery/

أفترض أنك تستخدم PHP ، ولديك عينة JSON في سلسلة:

//I have the JSON string in $json::
$jsonArr = json_decode($json);
$jsonOput = array();

//move descriptions into a numbered array, (E.G. a JSON [])
foreach($jsonArr['events'] as $a=>$b) {
    $jsonOput[] = $b['description'];
    unset($jsonArr['events'][$a]['description'];
}

//Output the original JSON, without the descriptions
echo json_encode($jsonArr);
//Output the JSON of just the descriptions
echo json_encode($jsonOput);

من الواضح أنك ستخرج الوصف مجانًا أو الأوصاف الوحيدة فقط ؛ اعتمادا على ما هو مطلوب.

تحرير: إصلاح الرمز لقول بشكل صحيح unset () بدلاً من عدم الانهيار () ، خطأ مطبعي ...

EDIT2: MXHR (Multipart XMLHTTPREQUEST) يتضمن عمل سلسلة من جميع الأوصاف ، مفصولة بواسطة محدد.

$finalOput = implode('||',$jsonOput);

وتقديم طلب لتلك السلسلة الطويلة. أثناء هبوطه ، يمكنك قراءة الدفق وتقسيم أي شيء يتم الانتهاء منه من خلال البحث عنه ||.

سيكون ذلك مشكلة من جانب الخادم. لا يمكنك تغيير البيانات على الواجهة الأمامية لجعل النتيجة أصغر نظرًا لأن لديك النتيجة بالفعل.

استخدم مكالمة مختلفة أو إضافة معلمات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top