Hi Danielo
That is very close to what I was thinking about, but probably your
> implementation is better.
> What I was actually looking for is to clearNonStandardFields. From the
> code I understood that every field set as undefined will remain empty. From
> what you write I understand that every undefined field will be eliminated.
> What version is correct?
>
If the final value of a field is undefined after cascading the arguments to
the $tw.Tiddler() constructor, then that field will be eliminated from the
resulting tiddler. If you want the field to remain but have a blank value
you can set it to the empty string.
> Why do you pass the wiki as parameter? this function will be inside the
> widget, so it should be able to access via this.wiki.
>
I coded removeNonStandardFields() as a generic utility function that could
be called from anywhere.
Best wishes
Jeremy.
>
> Thank you very much for your help!
>
> El viernes, 4 de abril de 2014 16:09:23 UTC+2, Jeremy Ruston escribió:
>>
>> Hi Danielo
>>
>> My goal is to take a tiddler and clear all its fields except the standard
>>> ones. At a first instance my flow it was going to be like this:
>>>
>>> 1. Take the tiddler from the store.
>>> 2. Copy all its fields to a new temp object
>>> 3. Create a new empty tiddler.
>>> 4. I suppose the empty tiddler has just the standard fields.
>>> 5. Delete those fields from my temp object.
>>> 6. Clear all the fields in the temp object.
>>> 7. Create a new tiddler with this order wiki.addTiddler(new
>>> $tw.Tiddler(oldTiddler,tempObject))
>>>
>>> I think what you need is something like this:
>>
>> function removeNonStandardFields(wiki,title) {
>> var standardFieldNames = "title text tags modified modifier created
>> creator".split(" "),
>> tiddler = wiki.getTiddler(title);
>> if(tiddler) {
>> var clearFields = {};
>> for(var fieldName in tiddler.fields) {
>> if(standardFieldNames.indexOf(fieldName) === -1) {
>> clearFields[fieldName] = undefined;
>> }
>> }
>> wiki.addTiddler(new $tw.Tiddler(tiddler,clearFields));
>> }
>> }
>>
>> Basically, any field set to "undefined" at the end of the cascade in the
>> $tw.Tiddler constructor will ensure that that field is absent from the
>> resulting tiddler.
>>
>> Best wishes
>>
>> Jeremy
>>
>>
>>
>>
>>> But the problem is that the new tiddler has any field.
>>>
>>> El jueves, 3 de abril de 2014 19:18:30 UTC+2, Jeremy Ruston escribió:
>>>>
>>>> Hi Danielo
>>>>
>>>> In TiddlyWiki, tiddler objects are immutable; once one has been created
>>>> the values of the fields cannot be changed. In 5.0.9, that restriction is
>>>> enforced, but at the moment there's nothing to stop erroneous code
>>>> modifying a tiddler object.
>>>>
>>>> To modify a tiddler, one instead overwrites the tiddler in the store
>>>> with a new tiddler with the same title. Here's the crucial line from the
>>>> function you quoted:
>>>>
>>>> self.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreat
>>>> ionFields(),tiddler,updateFields,self.wiki.getModificationFields()));
>>>>
>>>> If we separate things out, you can see that the constructor for
>>>> $tw.Tiddler is being called with four parameters. Each one is a hashmap of
>>>> field values; they are merged left to right, so that the rightmost field
>>>> with the same name wins. The resulting tiddler is then passed to
>>>> addTiddler() to add it to the store.
>>>>
>>>> Best wishes
>>>>
>>>> Jeremy
>>>>
>>>>
>>>>
>>>> On Thu, Apr 3, 2014 at 12:53 PM, Danielo Rodríguez
>>>> <[email protected]>wrote:
>>>>
>>>>> Thank you BJ,
>>>>>
>>>>> Then, what is the difference between using
>>>>> $tw.wiki.addTiddler(tiddler) and new $tw.Tiddler() ?
>>>>> Could you explain me the syntax?
>>>>>
>>>>> El jueves, 3 de abril de 2014 10:15:14 UTC+2, BJ escribió:
>>>>>
>>>>>>
>>>>>> HI Danielo,
>>>>>> with the tw5 code, the Tiddler object is like a house that the
>>>>>> actual 'tiddler' ocupies. the actual 'tiddler' is known by it name,
>>>>>> stored
>>>>>> in title field. When the 'tiddler' changes in some way it need to change
>>>>>> its house. the call to new $tw.Tiddler() get a new house for the
>>>>>> tiddler.
>>>>>> The actual 'tiddler' itself is the data inside the old Tiddler object
>>>>>> that
>>>>>> must be copied (and changed) and put in the new Tiddler object. Hope that
>>>>>> helps!
>>>>>>
>>>>>> cheer
>>>>>>
>>>>>> Jeff
>>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "TiddlyWikiDev" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to [email protected].
>>>>> To post to this group, send email to [email protected].
>>>>>
>>>>> Visit this group at http://groups.google.com/group/tiddlywikidev.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Jeremy Ruston
>>>> mailto:[email protected]
>>>>
>>>
>>
>>
>> --
>> Jeremy Ruston
>> mailto:[email protected]
>>
>
--
Jeremy Ruston
mailto:[email protected]
--
You received this message because you are subscribed to the Google Groups
"TiddlyWikiDev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/tiddlywikidev.
For more options, visit https://groups.google.com/d/optout.