By Developers, For Developers
| PDF Pg | Paper Pg | Type | Description | Fixed on | Comments | |||
|---|---|---|---|---|---|---|---|---|
| 9 | TYPO | The second footnote ends in nothingness - maybe it’s just a cross reference missing, but who can be sure? So I’m reporting it none the less. | 2008-03-02 | |||||
| 26 | TYPO | in the code for the first content pane, the form fields for last name and middle initial are missing. Also, the is not closed. While this is obvious, in the later code segments, all fields are listed, which makes the first sample feel inconsistent. | 2008-03-02 | |||||
| 28 | TYPO | First sentence has a typo. Instead of “Here, it looks like whetever…” it should say “here, it looks like whAtever…” | 2008-03-02 | |||||
| 32 | SUGGEST | The code on page 32 contains a reference to a means of showing some kind of password change dialog: this is not explained in the rest of the chapter. While I see that this would never fit into the scope of an introduction like this, why not either remove this part from the exapmple or notify the reader that it’ll be explained later on? | 2008-03-02 | |||||
| 37 | ERROR | the first paragraph compares object literals to hashes in PHP and Perl. In PHP though, hashes are in face called associative array - mostly just array though. The term hash is very much Perl specific. | 2008-03-02 | |||||
| 44 | ERROR | The second bullet point describing JSON states that “The only items on the right-hand side of the “:” are quoted strings, numbers, the boolean constants true and false, and the constant null. No expressions beyond those are allowed." this is not correct. Array- and Object literals both are permitted too, allowing to build nested structures of objects and arrays which is very useful. | 2008-03-02 | |||||
| 51 | SUGGEST | is figure 3.2 well-placed right in the middle of the code sample? IMHO it would make more sense to show it at the end of the sample not to destroy the flow of the code. | 2008-03-03 | |||||
| Ch 2 | ERROR | See my comments under discussion. The code for Chapter 2 does not work. | 2008-03-02 | |||||
| ch 2 | SUGGEST | Drop all the references to web servers. Most people will be doing this locally at first ans since the Javascript interpreter is in the browser there is no need for a web server. The only thing required is a reference to wherever you put Dojo. | 2008-03-02 | |||||
| 14 | TYPO | You refer to Fred Brooks Mythical Man_Month as an “engineering tomb”, but should probably read “engineering tome” | 2008-03-02 | |||||
| 26 | ERROR | In the Form Layout Example in this chapter the section of the form designated for the first tab is incomplete. There is only the label for the first name field. No other labels or fields and this section has no closing div tag. The last section has two closing div tags. Also as far as I can tell there is nothing in this sample to format the input fields and labels as they show up in the picture. They are all just left justified. | 2008-03-02 | |||||
| 39 | TYPO | The variable resultUI is never declared, and presumably ought to be the argument oneResult. A better argument/var name might be “list” or “listNode”, given the function name “createListItem”. (A better function name than “createListItem” might be “appendNewListItem”: “create” is very ambiguous, it could mean “create but do not attach/insert/append” or “create and insert”, etc etc, when in fact the function only creates and appends.) | 2008-03-02 | |||||
| 44 | ERROR | Describing JSON in the second of two bullet points, you say the right-hand side of a “:” can only contain quoted strings, numbers, booleans, and null. Of course this isn’t true: you can have objects in {} and arrays in [] as well, as you do on the very next page’s snippet. | 2008-03-02 | |||||
| 14 | SUGGEST | I think the book ought to be upfront about some of Dojo’s flaws in this section. Specifically, I think this statement is misleading: “It seems to surprise the least… to be natural.” Here are some examples of how Dojo is anything but natural, and very surprising indeed. 1. All I want to do is assign one of Dojo’s hard-coded colors in stye attribute. In other words, in Javascript I want to know what to type on the right-hand side of the Javascript statement: myNode.style.backgroundColor = … Here’s what you have to do: myNode.style.backgroundColor = dojo.colorFromArray(dojo.Color.named.orange).toCss(false); It’s a stretch to describe that as natural or not a surprise; it’s unguessable. 2. Because of inconsistencies in naming, there’s no way to know how to reference events declaratively without wading deep into the source code, often through multiple hierarchies of inheritance. For a full description of the problem see this link: www.dojotoolkit.org/forum/dijit-dijit-0-9/dijit-development-discussion/why-inconsistency-access-dijit-event-methods#comment-12200 Dojo has many virtues, but to be fair to the reader, I think these problems ought to be mentioned. Dojo isn’t perfect, and it would be best to let the readers know where some of these imperfections lie. | 2008-03-02 | |||||
| 49 | SUGGEST | I think a picture is needed on this page to clarify all the different types of rows, especially for the following paragraph:
The second sentence tells what Grid can do with a subrow, but we still haven’t been told what it is (or why it can be called physical). In the third sentence, we get a new concept, logical row — but we still don’t know what a subrow actually is. There’s too much information too fast. A diagram showing a grid, with the various kinds of rows pointed out in it, could help a lot here. | 2008-03-02 | |||||
| 55 | TYPO | The snippet on this page contains type=“dojo/connect”. However, the paragraph immediately following refers only to type=“dojo/method”. (It also doesn’t seem like a good idea to mention the Parser at this point: it hasn’t been introduced or described, doesn’t seem essential to understand how to wire together the declarative code at this point, and so is likely to confuse the reader.) | 2008-03-03 | |||||
| 52 | SUGGEST | At 3.4, a graphic showing what we are ultimately trying to build would be helpful. As the text stands, the reader is left wondering: - where is this link for cigar info to be displayed? - where are the results to be displayed - on a new page, in a “subrow” (how is that different from a row?), what? All this questions could be answered by showing Fig 3.6 here (preferably showing a whole screen, not just a screen clip). Instead, that figure doesn’t appear until 6 pages later. | 2008-03-02 | |||||
| 52 | SUGGEST | In the first paragraph of 3.5, it might be helpful to clarify how the reviews are displayed, rather than just state that they will be. One solution is to change the last sentence: “… in a list that will be displayed directly under the clicked cigar’s row. Clicking anywhere in the review list would hide it again.” | 2008-03-02 | |||||
| 62 | TYPO | resultUl is undefined, and confusing again on this page. A search of the pdf shows that the variable resultUl is never defined; it first makes an appearance on page 39 as a javascript var. The name suggest that it is a “UL” node. If so, the code on this page is silent about how it magically appeared between two rows of a dijit grid, and which two rows. (I’m assuming from Fig. 3.7 that every list of reviews appears between two rows, under the cigar to be reviewed, even though the figure does not show any rows beneath the reviews.) Needed: - resultUl needs to be defined in code and explained in the text. /r:b: | 2008-03-02 | |||||
| 69 | TYPO | Possessive apostrophe missing at end of first paragraph: “other module’s objects” | 2008-03-02 | |||||
| 69 | TYPO | I mean, “modules’” (not “module’s”). (Is there no way to edit a comment here?) | 2008-03-02 | |||||
| 71 | SUGGEST | I don’t think it will clear to many what you mean by saying “conseqent to a single resource request”. Better perhaps: “Http requests are expensive, and their performance varies unpredictably with network conditions, so you want your browser to make as few of them as possible. Why not package several modules together so the browser can load all of them in one single http request, instead of loading them individually?” | 2008-03-02 | |||||
| 69 | SUGGEST | IMHO the attempt to explain or define what a dojo module is on pages 69-70 is not successful. I’ll try to indicate some of the reasons, and offer a solution. - To say that a module “manifests” something on p. 69 does not, I think, really explain anything. To “manifest” is not a general or javascript term, and if you look it up in the dictionary it has many meanings, none of which seem to fit. If anything, the word “is” might do just as well. - To say that a file name “implies” an object name implies a module name also is a little to open-ended to be helpful. A definition should say what something is, so you can identify it or create one yourself. Saying it implies things isn’t specific. - It’s never clear what the scope of js object of a module is: is it a global? - Is the module’s path on p. 69 (first bullet) absolute or relative? If relative, relative to what? I’m still not sure I know what a module is, but I’ll attempt the sort of paragraphs I’m looking for here:
Thus there is a global object dojo and its javascript file dojo.js, all of which constitute the module dojo. More generally, a module name also includes its path relative to either the dojo module or to a parent module (modules can contain other modules). [Insert one sentence example.] In this book we will call the module javascript files “primary script files,” since a module may use others not directly related to the script’s object. The names of primary script files follow some conventions too, one of which is that if it begins with a capital letter the corresponding object is a Dojo “class,” which we will define later. I’m not claiming I’ve correctly defined a module here (although I hope I have). I’m just trying to show how it might be defined more precisely than on pp.69-70. | 2008-03-02 | |||||
| 184 | TYPO | The five main ways of getting a widget reference is so useful, it might be worth making a “cheat sheet” appendix with this and similar tips. | 2008-03-03 | |||||
| 152 | SUGGEST | It is unclear whether “property” is a string or a special dojo class/type in statements like:
It would be helpful to clarify that. | 2008-03-02 | |||||
| 153 | SUGGEST | It’s not quite obvious enough that “position” is an integer. Yes it’s in the API, but that’s a dig. It would be best to add a clause or sentence explaining it. | 2008-03-02 | |||||
| 154 | SUGGEST | You write: “Note how the nodes are not destroyed.” Note this how? I assume it is because .orphan returns a NodeList of them, but the text doesn’t say that. | 2008-03-02 | |||||
| 44 | TYPO | “It they | 2008-03-02 | |||||
| 32 | ERROR | You use labels for form fields, but the corresponding form fields don’t have IDs (the label’s for attribute references an ID) | 2008-03-02 | |||||
| 92 | TYPO | You’ve got an object called yourOjbect at pdf page 92 and 93. I guess you wanted to write yourObject?! | 2008-03-02 | |||||
| 127 | SUGGEST | It is never explained why we should do e.g. … instead of just: … What I think is needed is a short explanation of why, in the above code, using dojo.Deferred is preferable. I can’t suggest any such reasons, because I can’t see any, even after reading pages 125 to the end of the chapter. I’m sure there are good reasons, but I don’t see them (perhaps I missed them). For example, the short paragraph just above “Registering Callbacks with dojo.Deferred” describes needs that can be addressed without dojo.Deferred, just by using the counter in finishDisplay. The order in which continueWithData() and continueWithMetadata() fire is not important, all that matters is that populatePanelWithData() not fire until they do: and finishDisplay() ensures this will happen just with the displayInfo.processCompleteCount. dojo.Deferred just doesn’t seem to be doing any work in this example: it isn’t needed to synchronize the two “continue” functions. A stronger justification for using dojo.Deferred is needed. /r:b: | 2008-05-13 | |||||
| all | TYPO | Footer for Errata does not point to the Errata section for Dojo. | 2008-05-13 | |||||
| 10 | TYPO | “sinking swap” might oughta be “sinking swamp” | 2008-05-13 | |||||
| 20 | TYPO | “recommend” instead of “recommending” on ln 2 | 2008-03-21 | |||||
| 20 | TYPO | ln 4 awkward “for using serving it from” | 2008-03-21 | |||||
| 220 | TYPO | “to different URL” -> “to a different URL” | 2008-03-21 | |||||
| 221 | SUGGEST | Problem What is a “feature”? This term is not defined anywhere; also, the word “of” is missing. This all confuses the reader. AFAIK, “feature” is just a way to avoid saying “method” twice here. Solution: “The driver ItemFileReadStore | 2008-03-21 | |||||
| 224 | SUGGEST | The explanation of a label is (to me) confusing because it never explicitly states that a label is just another attribute. Perhaps it would be better her to give a very simple example, instead of trying to just describe. Suggested alternative expanation: An identity is an attribute, and its unique value is often numbers or symbols. [{ customerNumber: “XH39”, customerName: “Jane Doe”, status:“current”}, { customerNumber: “CR99W”, customerName: “Jane Doe”, status: “current”}] Note that the label does not have to be unique, even though the identity does. /rb | 2008-03-21 | |||||
| 144 | OK | The code sample works fine for me on a Mac/FF with this code block: The text however mysteriously wraps all of that code into a function declaration (see below). If that is actually necessary, that really ought to be explained: Also, it might be useful to add a reference to the discussion of why dojo.addOnLoad is better than document.onLoad. | 2008-05-13 | |||||
| 153 | SUGGEST | The explanation of the ‘orphan’ method seems unclear to me. For example, the sentence reads as if Node.removeChild does the catching of nodes in a filter (“by” should probably be “with”). Suggested alternative: “orphan: takes a single-expression CSS query an argument (like ”.foo“, ”#bar“, ”H1“, etc); all elements in the NodeList which match are removed from it (by Node.removeChild), and are returned in a new NodeList. The single-expression CSS query is called a ”filter." | 2008-05-13 | |||||
| 143 | SUGGEST | Fig 7.9 on page 162 ought to be moved up to page 143/4. That’s twenty+ pages of complicated box diagrams, arrows, and code until the reader finally finds out (by looking at Fig 7.9) what we set out to do on page 143, and that’s too long. | 2008-05-13 | |||||
| 154 | SUGGEST | Re suggestion #31150: I meant page 154, not page 143. (It really would be helpful if errata comments could be edited!) | 2008-05-13 | |||||
| 35 | SUGGEST | Why is dojo.xhr always written as dojo.xhr/sup>? This starts on page 35. If this is shorthand for dojo.xhrGet, .xhrPut, .xhrPost, why is the a superscript? If this shorthand is meant, it might be better to explain this the first time it is used, and to echo regex by not making it a superscript. | 2008-03-21 | |||||
| 106 | TYPO | “Since our handler does require any particular context, we omitted the context argument.” Change: | 2008-03-21 | |||||
| 50 | SUGGEST | It is confusing that on the one hand we have dojo.require(“dojox.grid._data.model” ); together with <div dojoType=“dojox.grid.data.DojoData”…> Ditto with dojo.require(“dojox.grid.Grid”) versus <div dojoType=“dojox.Grid”…> For Java programmers this is especially confusing, because the relationship between a package name and one of its classes is always simple. Here, there seems to be no rhyme or reason, no clear relationship between what is required/imported and what is used. Could you add at least a footnote explaining this a bit? Thanks! | 2008-03-21 | |||||
| 144 | OK | Re comment #31148: I see that the code is written to avoid polluting the namespace, as in Fla06, section 8.8.3. Because the reader is already absorbing so much new information, I suggest perhaps writing the code in the more straight-forward way (as I did in #31148), and just adding a footnote to Fla06 saying: “We’re keeping things simple here, but there is in fact a better way to write this javascript code that avoids polluting the javascript namespace; for more details see [Fla06], section 8.8.3.” | 2008-05-13 | |||||
| 178 | SUGGEST | The code sample uses remote-scripting.css, but that file’s contents are never shown. Perhaps best to just remove the css file import? | 2008-05-13 | |||||
| 181 | SUGGEST | For people coding along who don’t have or don’t want to get dumpObject, perhaps at least a footnote on how to view ioArgs with Firebug using console.log(ioArgs). | 2008-05-13 | |||||
| 102 | OK | Really good explanation of events and event propagation here! | 2008-05-13 | |||||
| 103 | OK | You wrote: “It is also possible to skip the capturing phase without affecting the last two steps and this is exactly how the Dojo event framework works.” Suggestion: add “: it does not process capturing at all.” to the end of the sentence. Otherwise the reader may be left wondering (since you previously showed how to stop propagation): ok, but how does Dojo stop capturing without affecting 2 and 3? | 2008-05-13 | |||||
| 107 | SUGGEST | While this is clearly implied, you don’t explicitly advise readers to use “event.currentTarget” instead of “this” inside their handler functions. (1) It would be helpful to explicit about this — about where to use event.currentTarget — instead of just implying it. (2) Is there no way to pass event.currentTarget as the context argument instead? | 2008-05-13 | |||||
| 109 | OK | it would be helpful to add a reminder reference to page 81, where calling dojo.hitch with one argument is discussed. | 2008-05-13 | |||||
| 81 | OK | You make clear that dojo.hitch(“fn”) will execute dojo.global[“fn”] instead of calling fn from a non-global context. Perhaps add more explicitly: “Thus, any variable this in the function fn will be Javascript’s global context.” | 2008-05-13 | |||||
| 113 | OK | You write: “All of this is unnecessary with dojo.connect. Just connect the command handler directly to the command object and you’re done.” But isn’t there also a significant drawback, that because there is no centralization it is difficult to keep the handlers from stepping on each other and of keeping them organized in code? | 2008-05-13 | |||||
| 105 | OK | This sentence is very difficult to parse: “The context parameter is syntactic sugar for designating a handler that requires binding a function to a context (for example, a method to an object) without calling dojo.hitch explicitly.” Here’s why: “A handler that requires binding to a function to a context” sounds as if there’s something special about being a handler that can require binding some other function Suggested lternative: “The two last parameters context and handler actually end up being hitched to each other with dojo.hitch(), which is also why the context parameter is optional (see p. 81).” | 2008-05-13 | |||||
| 113 | TYPO | “For example, in a tradition application system,”: “tradition” -> “traditional” | 2008-03-21 | |||||
| 95 | OK | Perhaps be explicit by adding a sentence like: “The new property ‘name’ is added to the new instance of newObj, not to its prototype.” It would be helpful to state this explicitly, so learning readers don’t have to chase down mixin to figure this out; or speculate on the nasty side-effect of foo changing, then wondering whether maybe foo is cloned to avoid that, then go looking in the source code, etc etc etc. It’s just easier to on the reader to tell him/her explicitly | 2008-05-13 | |||||
| 50 | SUGGEST | As I said in comment #31187, the strange discrepancies between module and class namespaces, as revealed on this page for the dojo grid, are bewildering, especially to Java programmers. Suggestion: add something like my post (at tinyurl 2foycy) in the dojo book under “Creating Your Own Modules”, and on page 50 add a reference to it. | 2008-03-21 | |||||
| 185 | SUGGEST | To me, this sidebar on .byId is very confusing. The first paragraph never seems to say what dijit.byId() returns, it only tells me what dojo.byId() returns. Perhaps an alternative paragraph like this might be clearer: “You might ask, ”Why do I need to call dijit.byId(‘id’)? Can’t I just call | 2008-05-13 | |||||
| 222 | TYPO | Middle of the page: Also: function ctor(){} should be: function ctor(){ | 2008-05-13 | |||||
| 51 | OK | Problems with the GRID example. I used Aptana 1.1.5.009212… I had to manually import DOJO 1.1 into my project. After I did this I could get Aptana’s preview tabs for Safari and Firefox to work. Yet if I tried to open the grid_html page directly in Firefox (2.0.0.13) or Safari (3.0.4) running on Leapord 10.5.2, the web page would not work correctly. It would just give me the headers centered in th page (firefox) or at the bottom of the page (Safari). Again the preview panes in Aptana worked for Firefox, Safari, and the iPhone. But not actually in the browsers themselves after I launched them. | 2008-05-13 | |||||
| 342 | TYPO | 342 “Working our way up from cell-level extension points like grid( ) to..” grid() should be get( ) | 2008-05-13 | |||||
| 347 | TYPO | “dojox.grid.editors.ComboBox (Dijit): like Select, but ignores the values array and can accept entires not in the options array.” “entires” should be “entries” | 2008-05-13 | |||||
| 353 | SUGGEST | Is there a sort other than alphabetical? Many times, spreadsheets contain numbers. How does one create a numerical sort instead of alphabetical. I don’t see a way to do this without leading zeros on numerical columns. How can I solve this problem in Grid efficiently? | 2008-05-13 | |||||
| 355 | SUGGEST | More explanation of the filtering would be helpful. I don’t understand the purpose of much of what you have in code. Can you explain each line of code a bit more? I’m a bit lost on what much of it is really doing. Wish I could apply this right now, but I’m lost here. | 2008-05-13 | |||||
| 31 | ERROR | ‘for=“first_name”’ should be ‘for=“date_move”’ for date picker. | 2008-05-13 | |||||
| 41 | TYPO | Example shows function “appendNewListItem”, but text at bottom of page shows “createListItem”. | 2008-05-13 | |||||
| 49 | TYPO | Pages 49-50. The example shows the table dojoType attribute as dojox.Grid with the following text specifying dojox.grid.Grid. | 2008-05-13 | |||||
| 49 | SUGGEST | Disregard my previous comment for #31641. Explanation follows several paragraphs later, but confusing initially. | 2008-05-13 | |||||
| 54 | TYPO | ‘an hash’ should be ‘a hash’ in last line. | 2008-05-13 | |||||
| 55 | SUGGEST | “… that searchTerms variable” is referred to as though it was already mentioned. I assume you mean from the API page, but perhaps you could change to “… that searchTerms variable from the Yahoo search API…” | 2008-05-13 | |||||
| 55 | TYPO | “Grid provides hooks for you called events.” you to your | 2008-05-13 | |||||
| 56 | SUGGEST | Would be helpful to the reader to give an example result hash from Yahoo ResultSet.Result, so they have some idea of what is being returned so it is clearer what substitute is doing. I get the picture, but concrete examples make it crystal. | 2008-05-13 | |||||
| 59 | SUGGEST | For #31646, maybe reference this result example (for the impatient like me ;-) ) so that the reader knows the context for substitute. | 2008-05-13 | |||||
| 65 | TYPO | “but for now all we need is know is to use the” Awkward. | 2008-05-13 | |||||
| 127 | SUGGEST | Why does load: and error: have deferred.x() when the object was dataDeferred? This is not explained anywhere and I don’t follow where it comes from. Confusing. | 2008-05-13 | |||||
| 130 | SUGGEST | This example seems too abstract. I think I follow it, but I can bet a lot of users will have trouble with it. you might want to find a simpler, “more concrete” example. Hope this helps. | 2008-05-13 | |||||
| 131 | OK | Can you provide a diagram? The callback/errorback queue thing is confusing as hell. (Or, maybe its just the end of the day. ;-) ) | 2008-05-13 | |||||
| 140 | OK | Missing ‘c1’ from example line 23 | 2008-05-13 | |||||
| 160 | TYPO | “sans the x and y scroll offsets.” What is ‘sans’? | 2008-05-13 | |||||
| 162 | TYPO | “this kind is small optimization” to “this kind of small optimization” | 2008-05-13 | |||||
| 170 | TYPO | “4. Initialize the the height” extra “the”. | 2008-05-13 | |||||
| 171 | SUGGEST | Reference where dojo.partial is discussed. I simply can’t remember what or where it is. | 2008-05-13 | |||||
| 354 | ERROR | This filtering example seems to work if I page down, but the first page continues to posses unfiltered data. | 2008-05-13 | |||||
| 30 | TYPO | TextBox’s regular expression option: | 2008-05-13 | |||||
| 30 | ERROR | The regExp=“ | 2008-05-13 | |||||
| 60 | SUGGEST | In section 3.5 the Grid structure is changed from being configured in HTML to being configured in JavaScript. I found this transition hard to follow. | 2008-05-13 | |||||
| 305 | TYPO | provile must be profile in the first list item element | 2008-06-06 | |||||
| 262 | OK | “dojox.data.CsvStore for comma-separated variables” | 2008-06-06 | |||||
| 490 | ERROR | The links in the PDF to download the BAF and ODE applications do not work. Additionally, the baf/ode applications are missing from the downloaded .zip & .tgz files. There is a /code/baf directory, but with only a license.txt & a demo.js. | 2008-06-06 | |||||
| 44 | TYPO | In the code at the top of the page iterating over ‘urls’ hash….the line using dojo.string.substitution function should actually take ‘url[i]’ instead of ‘result’. | 2008-06-06 | |||||
| 108 | SUGGEST | I would prefer if code samples always sourced dojo.js from /dojoroot/dojo/dojo.js as they do in the earlier examples. The code asynchronous-programming/event.htm sources dojo.js from ../../dojo/dojo.js which makes the example fail to work in the environment I set up for the earlier examples without altering it. | 2008-06-06 | |||||
| 114 | TYPO | dysfunctional is misspelled as disfunctional Context: | 2008-06-06 | |||||
| 44 | ERROR | In the line of code demonstrating string substitution at the top of the page, the hash is called “result” instead of “oneResult,” as it is elsewhere in the example. Currently: listItem.innerHTML = dojo.string.substitute(“${title}”, result); Should be: listItem.innerHTML = dojo.string.substitute(“${title}”, oneResult); | 2008-06-06 | |||||
| 45 | TYPO | The last sentence of the page refers to a figure “on the following page,” but the words “following page” themselves are on the same page as the figure… | 2008-06-06 | |||||
| 96 | TYPO | First line reads “We going to spend an entire…” Should be “We are going…” | 2008-06-06 | |||||
| 149 | TYPO | Last paragraph, first sentence “…that we can used to experiment…” Should be “…that we can use to experiment…” | 2008-06-06 | |||||
| 182 | TYPO | Second full paragraph: “Before we go any further, let’s set up a example…” Should be “…set up an example…” | 2008-06-06 | |||||
| 254 | TYPO | In the “Alex Says:” box, it seems a bit redundant to end the last two paragraphs with nearly identical sentences. I think the reader would get the point if it were only mentioned once. | 2008-06-06 | |||||
| 369 | TYPO | First sentence: “Grid has a large assortment of extensions points…” Should be: “Grid has a large assortment of extension points…” | 2008-06-06 | |||||
| 29 | SUGGEST | styles for width and height are already defined in .formContainer so it may be confusing to define them inline again. I tested on Safari3+, IE 6+7, FF2x without inline styles -> OK. | 2010-01-20 | |||||
| 78 | TYPO | In line remove the redundant end tag. | 2010-01-20 | |||||
| 106 | TYPO | eventobj.stopPropagation(); should be eventObj.stopPropagation(); | 2010-01-20 | |||||
| 269 | ERROR | Both versions of genetox_def.html on this page seem identical but the text would indicate that the second version should have something additional compared to the first | 2010-01-20 | |||||
| 269 | ERROR | The filtering select example can’t work as shown. With the searchAttr=“docno”, it recognizes only the document numbers as input (and only autocompletes based on numbers not substance names). This example is badly in need of proofreading and testing. As presented, if you select a substance name, it fills in the docno in the text box. If you type in a substance name from the select list, it doesn’t recognize it. | 2010-01-20 | |||||
| 38 | TYPO | top p. 38 ‘oneResult’ does not seem to match up with preceding bottom page 37: | 2010-01-20 | |||||
| 493 | ERROR | At the end of the section 18.2 (Step 1), the instructions say to start the local HTTP server and navigate to obe.htm, but it should say main.htm instead. | 2009-12-11 | |||||
| 490 | TYPO | At the end of the page (5 lines from the end) it mentions the “obe.man” module and should be “obe.main” | 2009-12-11 | |||||
| 482 | TYPO | The web address for Vista Information Technologies in the footnote should be www.vista-info-tech.com. | 2010-01-20 | |||||
| 37 | TYPO | Last code snippet on the page: variable ‘result’ is not defined, and then the subsequent paragraph (p38) refers to oneResult, which is also not defined. (also noted in erratum #32561). | 2010-01-20 | |||||
| 197 | TYPO | The paragraph beginning ‘When this code is evaluated…’ does not match what the code in function example15() (on p195) actually does. There is no call to dojo.setObject, and object exercise15.myObject isn’t defined anywhere. | 2009-12-11 | |||||
| 191 | TYPO | In the code snippet, the parameter ‘synch: true’ is given. According to all the text preceding, this should be ‘sync: true’. | 2009-12-11 | |||||
| 207 | TYPO | In the code for function example21(), the key ‘synch’ in the args for dojo.xhrPut() should be ‘sync’. | 2009-12-11 | |||||
| 89 | ERROR | “dojo.isString(test) … either a string literal or a string variable.” But variables don’t have types, so there is no such thing as a string variable. And whether the argument expression contains just a variable is irrelevant to the value that dojo.isString sees. I believe what is intended instead of “string variable” is “string object”, as in the result of new String(). | 2009-12-11 | |||||
| 26 | SUGGEST | When the email input is introduced, it makes it seem as if it is an old friend that was already there. But none of the html code mentions it and it isn’t shown in Figure 2.1. Make sure it shows up in the figure and in the first div block on page 21. | 2010-01-20 | |||||
| 98 | TYPO | This isn’t really a typo — it’s a production error that should have been caught by the Q/A process. In figure 6.2 there are several incomplete See references. Example class Event target says: | 2009-12-11 | |||||
| 35 | ERROR | The last name input field erroneously assumes that words in someones last name should be propercased. However that is not true for many names (e.g. with the last names between —: Werner | 2010-01-20 | |||||
| 72 | TYPO | 4th line from bottom: remove ’ ’ as the previous script tag closes with /> | 2009-12-11 | |||||
| 414 | TYPO | 2nd bullet item on the page: ‘pattern specifies …’ should be | 2010-01-20 | |||||
| 187 | TYPO | In the description of figure 8.3: ‘comma-filtered’ should read ‘comment-filtered’ | 2009-12-11 | |||||
| 109 | ERROR | The 14 line of HTML code in this page says:“Events that can bubble always bubble; events never propagate.” | 2009-12-11 | |||||
| 398 | ERROR | in the code sample, there’s a closing tag ( )
|
Cigar
|
Length/Ring
|
Origin
|
Wrapper
|
Shape |
…
I am reading via epub so the page number might not be correct. You have an example:
"Bluggh! That middle assignment statement is nasty looking. Are the quotes balanced right? Are the subscripts off? You have to look awfully close to find out. So, we use a trick from dojo.string:
\tfor (var i=0; i < urls.length; i) {
\t var listItem = document.createElement(“li”);
\t listItem.innerHTML =
\t dojo.string.substitute(“${title}”, urls[i]);
\t listNode.appendChild(listItem);
\t}
That’s much better. The dojo.string.substitute method takes the hash in oneResult and applies the properties to a template. This template uses ${…}-style placeholders. So, ${url} is replaced with oneResult.url, and ${title} is replaced with oneResult.title."
You don’t actually name the hash oneResult until the next paragraph. In this paragraph the hash is “urls”. Not a big deal but a little confusing at first.
I am not sure what goes wrong, but I tried this script to build layout programmatically but the layout doesn’t work.
<baf/step1/obe/main.js)
The date example reports 5/10/1983 as possibly being “November 5”: that should be “October 5”.
Same on the following page.